我一直试图使用较大的随机数来实现桶排序:“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”的值。
发布于 2014-12-05 07:30:26
示例输入输出可能会有所帮助,但是"if(bj =0)“应该在这里做什么呢?我想,当计数为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<< " ";
}
}
}发布于 2014-12-05 07:29:32
您的代码中很少有问题。这是正确的版本
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]
}
}
}
}编辑:当数组中有重复项时,忘记了情况。“计数”的内环会处理它。
https://stackoverflow.com/questions/27310806
复制相似问题