Новый программист здесь! Я реализую сортировку выбора с переменной max вместо обычного min, но я все еще хочу сортировать от минимального к максимальному. Приведенный ниже код прекрасно сортирует список, за исключением первого значения, которое составляет очень большое отрицательное число ... Какие-нибудь подсказки, что я могу исправить, чтобы получить правильную сортировку?

void selection(int Array[], int size) {
   int i, j, max, temp;
   for (i = 0; i < size-1; i++) {
     max = i;
       for (j = i+1; j <= size; j++) {
          if ( Array[j] < Array[max] )
             max = j;
       }
       temp = Array[max];
       Array[max] = Array[i];
       Array[i] = temp;
   }
}
0
Jackson Ramirez 13 Фев 2020 в 21:21

2 ответа

Лучший ответ
for(j = i+1; j<=size; j++)

Эта линия - ваша проблема. Вы обращаетесь к одному за концом массива, который будет неопределенным поведением и может часто давать вам странные значения. Измените условие на j < size.

5
Jonathan Leffler 13 Фев 2020 в 18:27

В приведенных выше строках кода я вижу, что вы используете индексирование на основе 0 для массива, следовательно, когда вы ссылаетесь на Array [size] или Array [size + 1], это выдает значения мусора, вы должны заменить внутренний цикл на

for (j = i+1; j < size; j++) 
1
executable 13 Фев 2020 в 18:47