алгоритм сортировки по выбору неправильно сортирует числа

#c

Вопрос:

Я пытаюсь создать алгоритм сортировки выборки на C . Всякий раз, когда я запускаю программу, она неправильно сортирует список в порядке возрастания. Любая помощь будет признательна.

 #include <iostream>
#include <string>
using namespace std;

void swap(int arr[], int indexA, int indexB) {
    int tmp = arr[indexA];
    arr[indexA] = arr[indexB];
    arr[indexB] = tmp;
}

int main() {
    int list[] = { -4, 36, -200, 57, 3, 1, 1000, 353, 234, 435, -21353, 90324 };
    int minIndex = 0;
    int n = sizeof(list) / sizeof(list[0]);
    int i, j;

    for (i = 0; i < n - 1; i  ) { //move boundary one step at a time until you're at second to last elmnt
        for (j = i; j < n; j  ) {
            if (list[j] < list[minIndex]) {
                minIndex = j;
            }
        }
        swap(list, i, minIndex); //swap min elmnt of the list 
    }

    for (int i = 0; i < n; i  ) {
        cout << list[i] << "n";
    }

    return 0;
}
 

Комментарии:

1. Вы сравнивали свой код с какой-либо из десятков реализаций, доступных в Интернете?

2. Помните, что вы не просто хотите сортировать . Вы хотите выбрать сортировку . Это означает, что вы должны строго придерживаться правил сортировки по отбору. Обычно я бы сказал что- то вроде «секретное оружие программиста» в отладчике , но это может привести вас к программе, которая сортирует без реализации сортировки выбора. Сделайте то, что предложил Джармод, и если вы подтвердили, что ваша реализация соответствует описанию надежного сайта, такого как Википедия , и она ВСЕ еще не работает, затем пройдите программу с отладчиком и посмотрите, где программа отклоняется.

3. Не редактируйте вопрос, чтобы включить в него ответ. Либо выберите ответ, который привел вас к решению, в качестве правильного ответа, либо напишите ответ, объясняющий проблему и решение, если полезных ответов нет.

Ответ №1:

В алгоритме отсутствует один шаг. Минииндекс должен быть установлен в начале каждого цикла i.

Комментарии:

1. j = i; также начинается j не с того места. Вероятно, все еще сортируется, но за счет дополнительной переменной.

2. j должно начинаться с i 1. Если j=i, это просто означает, что он выполняет на одну итерацию больше, чем требуется.