Сортировка вставки не печатает все значения в C - PullRequest
0 голосов
/ 13 февраля 2020

Сортировка вставок не работает, она только печатает некоторые значения. Кто-нибудь знает, что я могу сделать, чтобы это исправить?

void insertion(int Array[], int n) {
   for (int i = 1; i < n; i++) {
      int j = i;
      while (j >= 0 && Array[j] < Array[j - 1]) {
         int temp = Array[j];
         Array[j] = Array[j - 1];
         Array[j - 1] = temp;
         j--;
      }
   }
}

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Тест во внутреннем l oop неверен: когда j == 0 вы читаете и, возможно, изменяете элемент со смещением -1, которое имеет неопределенное поведение , возможно, вызывая неправильный вывод, но поскольку вы не опубликовали выходной код, там могут быть другие проблемы.

Вот модифицированная версия:

void insertion(int Array[], int n) {
    for (int i = 1; i < n; i++) {
        for (int j = i; j > 0 && Array[j] < Array[j - 1]; j--) {
            int temp = Array[j];
            Array[j] = Array[j - 1];
            Array[j - 1] = temp;
        }
    }
}
0 голосов
/ 24 марта 2020

Сортировка вставок: Идея  Подобно тому, как большинство людей собирают покерные карты, начните с одной карты в своей руке. Выберите следующую карту и вставьте ее в надлежащем порядке сортировки. Повторите предыдущий шаг для всех карт enter image description here

...