Почему мой адаптированный алгоритм сортировки выбора не работает в C ++ - PullRequest
1 голос
/ 11 июля 2020

У меня есть код для сортировки выбора, который я написал за год a go in Python здесь , но когда я попытался адаптировать его к 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 дня, и ничего из того, что я сделал, не помогло.

1 Ответ

1 голос
/ 11 июля 2020

На самом деле вы немного отклонились от кода python.

  • В коде python вы установили length of array (numItems) на actual length - 1, но здесь вы положили length (numItems) такой же, как actual length.

  • А также при печати вы печатаете с i = 1. Вот почему ваш код не работает должным образом.

Таким образом, вы можете сделать эти изменения (один из способов):

  1. Измените j <= numItems в секунду для l oop на j < numItems
  2. При печати массива, используя последний для l oop, начните с i = 0
...