#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, это просто означает, что он выполняет на одну итерацию больше, чем требуется.