bucket sort给出了错误的结果

时间:2014-12-05 07:18:53

标签: c++

我一直在尝试使用大尺寸随机数实现桶排序示例:" rand()%1000000 问题是我得到的结果是错误的,这里没有正确列出的是我的桶排序代码

void binsort(int arr[], int n){
int maxsize = 1000000;
int *b = new int[maxsize];

for( int i = 0; i <= maxsize;i++){

    b[i] = 0;

}
for( int i = 0; i <n;i++){
    b[arr[i]]++;
    }
for(int j = 0; j <n;j++){
    if(b[j] !=0){
        cout<<b[j]<< " ";
        }

    }

} 数组将填充一些&#34; int random_number = rand()%1000000

2 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题。 这是正确的版本

void binsort(int arr[], int n){
    int maxsize = 1000000;
    int *b = new int[maxsize];

    for( int i = 0; i < maxsize;i++){         //correct the condition
        b[i] = 0;
    }
    for( int i = 0; i <n;i++){
        b[arr[i]]++;
    }
    for(int j = 0; j <maxsize;j++){       //run the loop for maxsize
        if(b[j] !=0){
           //Edit: loop over count to print the numbers
           for(int k=0; k<b[j]; ++k) {
              cout<<j<< " ";         //print j not b[j]
           }
        }

    }
}

编辑: 当数组中有重复项时忘记了这种情况。内循环&#39;计数&#39;照顾它

答案 1 :(得分:0)

示例输入输出可能会有所帮助,但是什么是&#34; if(b [j]!= 0)&#34;应该在这里干什么?我想,当计数为0时,打印0会产生更有用的结果。

编辑:阅读其他答案的代码..现在有道理,但他的代码也缺少for循环lol。

void binsort(int arr[], int n){
int maxsize = 1000000;
int *b = new int[maxsize];

for( int i = 0; i <= maxsize;i++){
    b[i] = 0;

}

for( int i = 0; i <n;i++)
{
    b[arr[i]]++;
}

for(int j = 0; j <maxsize;j++){
    if(b[j] !=0){
        for (int k = 0; k < b[j]; k++){
        cout<<j<< " ";
        }
    }    
}