为什么我改编的选择排序算法在 C++ 中不起作用

Why does my adapted Selection Sort algorithm not work in C++

我有一年多前在 Python here 中编写的选择排序代码,但是当我尝试将其改编为 C++ 时,它完全停止工作,并且该算法逻辑上完全一样,算法排序不同,打印出来乱七八糟。

void SelectionAscending2(int array[], int numItems)
{
    int count;
    int temp;
    int minimum;
    int Pass = 0;
    //while (Pass < numItems)
    for (int i = Pass; i < numItems; i++)
    {
        count = Pass + 1;
        minimum = Pass;
        //while (count <= numItems)
        for (int j = count; j <= numItems; j++)
        {
            if (array[count] < array[minimum])
            {
                minimum = count;
                count += 1;
            }
        }
        temp = array[Pass];
        array[Pass] = array[minimum];
        array[minimum] = temp;
        Pass += 1;
    }
    for (int i = 1; i < numItems; i++)
    {
        cout << array[i] << ", ";
    }
}

int main()
{
    int myArray[8] = { 4, 2, 1, 3, 6, 5, 8, 7 };

    int length = sizeof(myArray) / sizeof(myArray[0]);
    SelectionAscending2(myArray, length);
}

此代码在 python 中运行良好,但在 C++ 中它输出的是: 2, 3, 4, 5, 6, 0, 7, 我已经为此苦苦挣扎了 3 天,但我所做的一切都没有奏效。

实际上你已经从 python 代码转移了一点。

  • 在 python 代码中您设置了 length of array (numItems)actual length - 1 但在这里你把 length (numItems)actual length.

    一样
  • 而且在打印时你是从 i = 1 开始打印的。所以这就是为什么 您的代码没有按预期工作。

因此您可以进行这些更改(方法之一):

  1. 将第二个for循环中的j <= numItems改为j < numItems
  2. 使用最后一个for循环打印数组时,从i = 0开始