我试图通过计算元素来对数组进行排序,然后再次对它们进行排序"计算排序"

时间:2016-03-11 11:27:21

标签: c++ algorithm sorting

我试图通过在我想要排序的数组中创建另一个数量最大的数组来排序数组,然后每次我找到数字I ++时该数字的索引.ex:主阵列是{5,3,8,1,2,3} 另一个数组{0,1,1,2,0,1,0,0,1} 然后我的排序数组将像{1,2,3,3,5,8}我不知道为什么我的代码没有工作任何帮助吗?

#include <iostream>
using namespace std;
int findmax(int a[], int size){
int max = a[0];
for (int i = 0; i < size; i++)
    if (max < a[i])
        max = a[i];
return max;
}

 void sort(int a[], int n){
 int max = findmax(a, n);
int *arr;
arr = new int[max+1];
for (int i = 0; i < n; i++){
    arr[a[i]]++;
}
for (int k = 0; k < n;){
    for (int l = 0; l <= max; l++)  {
        while (arr[l] != 0){
            a[k] = l;
            arr[l]--;
            k++;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你真正应该做的是在调试器中逐行逐步执行代码。这样你就可以很容易地看到问题所在。

但是自从我开始写这篇文章后,我不妨将其作为答案发布。

问题是您分配并分配给arr的数组未初始化,其内容为 indeterminate 。使用未初始化的数据是未定义的行为

真正发生的是你分配的数据看似随机,很可能没有一个是零。这导致你的罪行完全错误。

解决方案是在计算值之前清除您分配的内存:

std::fill(arr, arr + max + 1, 0);