Не работает сортировка в приведенном коде - C (СИ)
Формулировка задачи:
Здравствуйте. У меня такая проблемка. Не работает сортировка...
Вот часть кода сортировки, скажите, в чем ошибка
void sortb(int razm){ double temp; int i, j, poz; for(i=0; i<razm; ++i); { poz=i; temp=masA[i].Ocen; printf("zopominaet ocen - %f\n", temp); for(j=i+1; j<razm; ++j) { if(masA[j].Ocen<temp) {poz=j; temp=masA[j].Ocen;} } masA[poz].Ocen=masA[i].Ocen; masA[i].Ocen=temp; printf("teper - %f\n", temp); } }
Решение задачи: «Не работает сортировка в приведенном коде»
textual
Листинг программы
... double temp; ... for ( i = 0; i < N-1; i ++ ) // достаточно поставить N-1 элементов for ( j = N-2; j >= i; j -- ) // идем с конца массива в начало if ( A[j].ocen > A[j+1].ocen ) // если они стоят неправильно, ... { temp = A[j].ocen; A[j].ocen = A[j+1].ocen; // переставить A[j] и A[j+1] A[j+1].ocen = temp; } ...
Объяснение кода листинга программы
- Задается температура, которая, как предполагается, не влияет на работу алгоритма сортировки.
- В первой части кода инициализируется массив A, который содержит N элементов. Каждый элемент массива A имеет структуру, которая включает в себя имя
ocen
и значение, представляющее собой оценку. - Во второй части кода начинается сортировка массива A методом
сортировки пузырьком
. - Первый цикл идет по массиву A от начала до N-2 элемента.
- Второй цикл идет по массиву A от N-2 до i элемента, начиная с конца массива.
- Если элементы A[j] и A[j+1] находятся в неправильном порядке (A[j].ocen > A[j+1].ocen), то они меняются местами с помощью временной переменной temp.
- Циклы завершаются, когда первый цикл достигает конца массива A или когда второй цикл достигает i элемента.
- В конце сортировки массив A отсортирован по возрастанию оценок.
- Температура сбрасывается до комнатной.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д