排序算法不起作用

Sorting algorithm not working

本文关键字:不起作用 算法 排序      更新时间:2023-10-16

我的排序算法不断产生 10-15 个相同的数字,它假设对我的数组进行排序,该数组的大小为 2000,数字从 1-100。这是我只编码的家庭作业在C++ 4 个月了,我已经整天都在努力,截止日期为 12:00。请帮忙。只是无法弄清楚算法

//Function to sort the numbers
void sortNumbers(int nums[], int ARRAY_SIZE) {
    int startScan, minIndex, minValue;
    for (startScan = 0; startScan < (ARRAY_SIZE-1); startScan++) {
        minIndex = startScan;
        minValue = nums[startScan];
        for(int index = startScan+1; index < ARRAY_SIZE; index++) {
            if(nums[index]<  minValue) {
                minValue = nums[index];
                minIndex = index;
            }
            nums[minIndex] = nums[startScan];
            nums[startScan] = minValue;
        }
    }
}

你只需要在内部循环之外进行交换。

获取此部分

nums[minIndex] = nums[startScan];
nums[startScan] = minValue;

脱离内循环。

您的代码应如下所示:

void sortNumbers(int nums[], int ARRAY_SIZE) {
    int startScan, minIndex, minValue;
    for (startScan = 0; startScan < (ARRAY_SIZE-1); startScan++) {
        minIndex = startScan;
        minValue = nums[startScan];
        for(int index = startScan+1; index < ARRAY_SIZE; index++) {
            if(nums[index]<  minValue) {
                minValue = nums[index];
                minIndex = index;
            }
        }
        nums[minIndex] = nums[startScan];
        nums[startScan] = minValue;
    }
}

以下是带有图像和步骤的选择排序的非常清晰的解释:http://www.algolist.net/Algorithms/Sorting/Selection_sort

你所做的事情的概念没有错,我所关注的只是倒数第三个关闭大括号}的位置。

当内部循环的整个意图是找到要与之交换的元素时,您是否真的想在内部循环内交换?根据定义,在循环完成之前,您无法找到它。


试着自己弄清楚,但如果由于某种原因你不能,请参阅下文:

void sortNumbers(int nums[], int ARRAY_SIZE) {
    int startScan, minIndex, minValue;
    // For every array index bar the last.
    for (startScan = 0; startScan < (ARRAY_SIZE-1); startScan++) {
        // Start with minimum at that point.
        minIndex = startScan;
        minValue = nums[startScan];
        // Check against every other array element not yet placed.
        for(int index = startScan+1; index < ARRAY_SIZE; index++) {
            if(nums[index]<  minValue) {
                minValue = nums[index];
                minIndex = index;
            }
        }
        // Swap when you've found the minimum.
        nums[minIndex] = nums[startScan];
        nums[startScan] = minValue;
    }
}

ALL 排序例程都需要交换值的临时副本。交换。想想这个的必要性。突出的第一件事是我没有看到任何地方交换。你正在粉碎你的价值观,导致它们的重复。你从哪里得到这个设计?

> 2000> 100,您可能会发现 bucketsort -> 计数排序是解决当前问题的合适方法。

编辑:用英语:你有一个100个整数的数组,可以计算输入中的数字

正如其他人所提到的,您的排序甚至没有正确交换值。