存储桶排序给出错误的结果
bucket sort gives the wrong results
我一直在尝试使用大尺寸的随机数实现存储桶排序 示例:"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]
}
}
}
}
编辑:忘记了数组中存在重复项的情况。"计数"的内部循环负责处理它
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- Static_cast转换为错误的数据类型,但结果仍然正确?
- C++ 犰狳库中的sort_index()函数给出了错误的结果
- C++:使用类在向量中搜索特定元素时,我得到了错误的结果
- 检查 n2 是否是 n1 的倍数后结果错误,但根本没有错误
- 为什么我的性能基准给了我错误的结果?
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 斐波那契检验(C++)的结果错误
- 在发布版本中划分两个双精度的结果错误
- 2D FFT后的图像结果错误
- 计算文本文件中的单个字母并打印结果 - 错误的输出 C++
- C++字符和 int 之间的转换,结果错误
- char*与std字符串的比较结果错误
- 斯波吉购物结果错误
- 超载"+"操作员,结果错误?
- 执行高斯消去程序时结果错误
- hash_djb2 PHP结果错误
- 按位操作比较结果错误
- 使用'if'语句和"<<"时的结果错误,'>>'运算符比较 3 个整数