c++ - 很喜欢选择排序,现在不会排序

标签 c++ class sorting

所以我希望进行基本的选择排序。我从书中逐字复制(有一个异常(exception)将在后面列出)。这是代码。

void SelectionSort::sort(int arr[], int size)
{
    int isEqual;
    int startScan, minIndex, minValue;

    for (startScan = 0; startScan < (size - 1); startScan++)
    {
        minIndex = startScan;
        minValue = arr[startScan];

        for (int index = startScan + 1; index < size; index++)
        {       
            isEqual = counters(arr[index], arr[index + 1]);

            if (isEqual == 1)
            {
                minValue = arr[index];
                minIndex = index;
            }
        }
        arr[minIndex] = arr[startScan];
        arr[startScan] = minValue;
    }
}

你会注意到我有一个 int isEqual分配给方法的 counters .我使用它是因为我想记录所做的比较。

counters 的代码

int AbstractSort::counters(int a, int b)
{
    counter++;
    if (a < b)
        return -1;
    if (a > b)
        return 1;
    if (a == b)
        return 0;   
}

基本上,它的作用与if (array[index] < minValue) 相同只有这样我才能跟踪我的比较。

我在我的 QuickSort 类中使用了这个方法,它对数据进行排序并对比较进行计数没问题。然而,我的 SelectionSort 不会对数据进行排序!

SelectionSort Error!

看起来它将数组中的最后一个数字移到前面,然后什么都不做。然而,它似乎确实进行了 190 次比较,尽管我并没有特别看到它的劳动成果。

我已经和我的橡皮鸭逐行讨论了这段代码,但我们似乎都没有发现错误。 我哪里做错了?

最佳答案

isEqual = counters(arr[index], arr[index + 1]);

这行代码比较后面的元素,找出较小的。所以内层循环找到小于前一项的最后一项,但没有找到范围内的最小值。不要与之前的比较,而是与最小值比较:

isEqual = counters(arr[index], minValue);

(请注意,arr[index + 1] 也读取了数组末尾,所以你很幸运它没有崩溃)

关于c++ - 很喜欢选择排序,现在不会排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37713952/

相关文章:

c++ - 删除了 'simple_vector::simple_vector(int)' 的定义

scala 参数化合并排序 - 令人困惑的错误消息

c - Skiena 的快速排序实现

c++ - 将 "std::vector<unsigned char>"的内容保存到文件中

c++ - 虚拟处理器和高级网络 linux 和 windows

Java可变数量的泛型

python - 如何通过 2 个键对字典列表进行排序,其中一个键基于任意列表

c++ - undefined reference ,尽管链接顺序正确

c++ - "n"键在Lua表中有什么特殊含义吗?

python - 如何链接不同Python文件中的类(多框架)?将不同页面链接回 MenuPage?