c++ - 具有巨大随机数的桶排序

标签 c++ bucket-sort

我知道桶排序到处都有很多例子,所以我试着实现这个,这样它就可以接受大量的随机数,但运气不好

void Bucket_sort(int arr[], int max){
     const int maxsize = max;
     int bucket_list = new int [maxsize+1];
     int length = sozeof(bucket_list) / sizeof(bucket[0]);
     for(int i = 0; i <max;i++){
         bucket_list[i] = 0; //fill with zeros
       }
       for (unsigned int i = 0; i <length; i++){
           bucket_list[arr[i]]++;
        }
        int position = 0;
        for (unsigned int i = 0 i < length; i++){
           for(int k = 0; k<bucket_list[i];k++){
                arr[position++] = i;
             }
          }
       }
      int main() {
         int max = 50000
         int arr[max];
         for (int i = 0; i < max; i++){
            arr[i] = rand() % 50000;
            }
            cout<<"Here are the numbers before Bucker Sort"<<endl;
            for (int j = 0; j < max; j++){
                 cout<<arr[j];
              }
            Bucket_sort(arr,max);
            for (int k = 0; k<max; k++){
               cout<<arr[k];
              }
           }

有些我无法让它工作的原因,它只会输出相同的订单(未排序) 我确实发现了一些与我相同的问题,但没有一个有帮助,这是一个 https://stackoverflow.com/questions/20037176/c-bucket-sort-putting-integers-into-buckets

最佳答案

这一行:

bucket_list = 0; //fill with zeros

这是在改变你的指针,而不是用零填充。你应该使用

bucket_list[i] = 0; //fill with zeros

编辑:您的代码存在更多编译器问题。整理好这些后,length 的计算仍然是错误的。您不能使用 sizeof 分隔技巧,因为 bucket_list 不是数组。替换

int length = sozeof(bucket_list) / sizeof(bucket[0]);

int length = maxsize

或者根本不使用长度(您已经有了 maxsize)。

关于c++ - 具有巨大随机数的桶排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181182/

相关文章:

algorithm - 线性排序下如何考虑桶排序?

algorithm - 如何确定桶排序的平均和最坏情况空间复杂度

c++ - 桶排序还是归并排序?

algorithm - 为什么我们在桶排序中使用插入排序?

c++ - 在整数上声明两个指针(VS2012)

C++ `ifdef` 与宏值的串联

Mac 上的 C++ 库无法使用 g++ my_program.cpp -o my_program 进行编译

c++ - 如何解决内存碎片

c#实现桶排序算法

c++ - std vector 迭代器不支持地址运算?