存储桶排序给出错误的结果

bucket sort gives the wrong results

本文关键字:结果 错误 出错 桶排序 存储      更新时间:2023-10-16

我一直在尝试使用大尺寸的随机数实现存储桶排序 示例:"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]<< " ";
        }
    }

}数组将填充一些值" int random_number = rand() %1000000

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

编辑:阅读另一个答案的代码.. 现在有意义了,但他的代码也缺少一个 for 循环,哈哈。

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<< " ";
        }
    }    
}

你的代码中几乎没有问题。这是正确的版本

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]
           }
        }
    }
}

编辑:忘记了数组中存在重复项的情况。"计数"的内部循环负责处理它