C++ bucket sort给出了错误的结果
我一直在尝试使用大量随机数实现桶排序,例如:rand%1000000 问题是我得到的结果是错误的,没有正确列出。这是我的桶排序代码C++ bucket sort给出了错误的结果,c++,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]]++
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的某些值,代码中几乎没有问题。 这是正确的版本
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]
}
}
}
}
编辑:
忘记了数组中存在重复项时的情况。“计数”上的内部循环处理它示例输入输出可能会有所帮助,但什么是ifb[j]=你应该在这里干什么?我想当计数为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<< " ";
}
}
}
对于int i=0;请参阅这个答案-