, поэтому у меня возникла проблема с сортировкой сортировки, которую я сделал в C. Когда она реализована в одной функции, я могу получить сортировку выбора для работы. Однако, когда я выполняю то, что задает мое задание, и использую функцию findMin, которая возвращает минимальный индекс массива, он не сортирует его полностью. Я попытался отладить его с помощью операторов печати, но я не могу понять, что происходит не так.Проблема с выбором сортировки и использованием метода findMin в C
Вот метод сортировки Я использую с помощью метода findMin:
void sortMin2(int A[]) {
int outer;
int minIndex;
for(outer = 0; outer < 5; outer++) {
minIndex = findMin(A, outer, 5);
if(minIndex != outer) {
swap(&A[minIndex], &A[outer]);
}//end if
} // end for
}
int findMin(int A[], int i, int j) {
int k; // for loop
int index = 0;
for(k = (i + 1); k < (j+1); k++) {
if(A[k] < A[index]) {
index = k;
} // end if
} // end for
return index;
} // end findMin
void swap(int *i, int *j) {
int temp = *i;
*i = *j;
*j = temp;
} // end swap
А вот мой выходной, когда я запускаю его на массив из пяти значений:
Array Before: 4, 10, 9, 1, 3,
4, 10, 9, 1, 3,
1, 10, 9, 4, 3,
10, 1, 9, 4, 3,
10, 1, 3, 4, 9,
10, 1, 3, 9, 4,
Array after: 4, 1, 3, 9, 10,
Теперь здесь это мой метод сортировки по выбору, который действительно работает (т. е. правильно сортирует его).
void selectionSort2(int A[]) {
int outer; // for loops
int inner;
int minimum = 0;
//int minIndex = 0;
for(outer = 0; outer < 5; outer++) {
//minIndex = findMin(A, 0, 19);
minimum = outer;
for(inner = outer + 1; inner < 5; inner++) {
if(A[minimum] > A[inner]) {
minimum = inner;
} // end if
} // end inner for
if(minimum != outer) {
swap(&A[minimum], &A[outer]);
} // end if
} // end outer for
}
Кто-нибудь видит, почему моя функция sortMin2 на самом деле не сортирует его?
Учитывая, что у вас есть набор рабочего кода, вы должны сравнить плохой код в хороший код строку за строкой, и в каждой строке спросите себя: «Делают ли эти две линии одно и то же, а если нет, почему бы и нет?» – user3386109
Я попытался проследить его и выяснить, почему он не работает/делает то же самое. Но я действительно не могу понять это :(Может быть, я слишком долго смотрел на него – Alex
Первое, что я хотел бы сделать, это совместить все имена переменных. В рабочем коде у вас есть переменные 'external',' inner 'и' minimum'. Функция 'findMin' должна иметь точно такие же переменные. Единственный oddball - это параметр' j', который соответствует номеру '5' в рабочем коде. Вам нужно придумать описательный имя для этого параметра, например 'arraySize', или' size' или 'length'. Но все остальные параметры и переменные могут/должны иметь то же имя, что и в рабочем коде. И тогда код в' findMin' должен быть идентичный рабочему коду – user3386109