递归bucketsort是更好的选择

时间:2018-03-29 11:30:25

标签: c++ algorithm sorting

我们知道在存储桶排序中我们将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]<<" ";
}

你能告诉我这是一个更好的选择吗?它的时间和空间复杂性是什么。

0 个答案:

没有答案