我们知道在存储桶排序中我们将arr [i]元素插入到bucket [n * array [i]]中并在每个存储桶中使用任何排序算法,然后按顺序重新收集每个存储桶以获得排序列表。
<登记/>
如果我们使用任何排序算法,那么在最坏情况下,senerio的排序复杂度将等于子排序算法。
所以我想到如何重复使用相同的铲斗排序
这是它的代码
#include<iostream>
#include<vector>
using namespace std;
vector<float> bucketSort(vector<float> vect,int constant=1){
if(vect.empty())return vect;
if(vect.size()==1)return vect;
bool same=true;
for(int i=0;i<vect.size()-1;i++)
if(vect[i]!=vect[i+1]){
same=false;
break;
}
if(same)return vect;
vector<vector<float>> buckets(10);
int size=vect.size();
for(int i=0;i<size;i++)
buckets[((int)(vect[i]*constant))%10].push_back(vect[i]);
constant*=10;
for(int i=0;i<10;i++)
buckets[i]=bucketSort(buckets[i],constant);
vector<float> result;
for(int i=0;i<10;i++){
int size=buckets[i].size();
for(int j=0;j<size;j++){
result.push_back(buckets[i][j]);
}
}
return result;
}
int main(){
int size;
cin>>size;
vector<float> vect(size);
float temp;
for(int i=0;i<size;i++)
cin>>vect[i];
vect=bucketSort(vect);
for(int i=0;i<size;i++)
cout<<vect[i]<<" ";
}
你能告诉我这是一个更好的选择吗?它的时间和空间复杂性是什么。