Не работает сортировка в приведенном коде - 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 отсортирован по возрастанию оценок.
- Температура сбрасывается до комнатной.