创建小类(c ++类简介)

时间:2018-10-23 04:34:04

标签: c++ arrays

我目前是一名正在学习c ++课的大学生,因此我陷入了这个问题。 “定义一个功能

void smallSort(int nums [],int长度)

使用“小排序”算法对小数字序列进行排序。 (在我们的例子中,“ small”表示0到9999之间的任何值。)该算法的工作方式如下:声明一个本地int数组,其大小为10000的counts,并将每个元素初始化为0。然后遍历数组num,对于每个数字,递增带有该索引的计数元素。最后一步是遍历counts数组并将值复制回nums。例如,如果您的循环当前位于counts数组的元素3上,并且counts [3]包含10,则可以将10个3拷贝到nums数组中。

例如:假设nums为{1,4,3,0,0,4,1,1,4,2,6,4,6,0,0,0,0,4}并且length为18.然后,在填充counts数组后,它将包含值{6,3,1,1,5,5,0,2,...},counts [6]之后的所有元素都等于0。这是因为数组nums包含六个0,三个1,一个2,一个3,五个4的零5,两个6和不大于6的值。在算法的下一阶段,我们将循环遍历counts数组并复制回六个0,然后三个1,一个2等到nums数组中,因此它包含{0,0,0,0,0,0,1,1,1,2,2,3,4,4,4,4,4,4,6,6 }。请注意,nums现在按升序排序。“

这是我的解决方案:

void smallSort(int nums[], int length){
int count [10000];
    int a = 0;
    for(int i =0; i<10000; i++){
        count[i] = 0;
    }
    for(int i =0; i<length ; i++){
    count[nums[i]]++;   
    }
    for(int i = 0; i< length; i++){
        for(int j = 0; j<count[i]; j++){
            nums[a] = count[i];
            a++;
        }
    }
}

这是我应该得到的答案: 0·1210·3000·2434·446·54·111·900·43·7·17·1001·9999·0·0·9999·1210·54↵ 0·0·0·7·17·43·54·54·111·446·900·1001·1210·1210·2434·3000·9999·9999·↵

这就是我得到的: 0·1210·3000·2434·446·54·111·900·43·7·17·1001·9999·0·0·9999·1210·54·↵ 3·3·3·1·1·54·111·900·43·7·17·1001·9999·0·0·9999·1210·54·↵

我有幸尝试解决此问题超过2小时,并且由于我一直把问题弄错了,所以我决定在Xcode上创建自己的数组并尝试解决它,但是“ count [nums [i]]”旁边出现错误++;”内容为“线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x7ffeefc15928)”。

1 个答案:

答案 0 :(得分:0)

您的smallsort函数有几个问题。

  1. count数组包含每个 输入。并且您正在将频率分配给nums[a]

  2. 外部for循环(正在重新填充nums数组)必须 遍历所有count数组,因为输入值 可以介于0到9999之间。

经过这些修改,代码将如下所示:

void smallSort(int nums[], int length){
    int count [10000] = {0}; //This will set all array elements to 0
    int a = 0;

    for(int i =0; i<length ; i++){
        count[nums[i]]++;   
    }
    for(int i = 0; i< 10000; i++){
        for(int j = 0; j<count[i]; j++){
            nums[a] = i;
            a++;
        }
    }
}

int main(int argc, char const *argv[])
{
    int nums[] = {0, 1210, 3000,2434,446,54,111,900,43,7,17,1001,9999,0,0,9999,1210,54};
    smallSort(nums, 18);

    for(auto& i: nums)
        cout << i << ' ';       

    return 0;
}

输出:

a.exe
0 0 0 7 17 43 54 54 111 446 900 1001 1210 1210 2434 3000 9999 9999