Сравнение предыдущих элементов массива для алгоритма вставки сортировки - PullRequest
1 голос
/ 05 апреля 2019

Я работаю с алгоритмом сортировки вставок. Как вы знаете, нам нужно сравнить элементы массива с предыдущими элементами массива. Я пытаюсь сделать это с помощью вложенных циклов:

scanf("%d", &size); //gets array size

int array[size];
int temp = 0;

for (int i = 0; i < size; i++) {
    scanf("%d", &array[i]);
} // Takes the index of array.

/*
 Sorting part begins.
 */

for (int j = size - 1; j <= 0; j--) {
    int pseudoJ;

    pseudoJ = j;

    while (1) {
        if (array[pseudoJ] < array[pseudoJ - 1]) {
            temp = array[pseudoJ];
            array[pseudoJ] = array[pseudoJ - 1];
            array[pseudoJ - 1] = temp;
            pseudoJ--;
        } else
            break;
    }  
}

/*
 * Sorting Par Ends.
 */

Предположим, что ввод: 3(Array Elements)>3>2>1, Я ожидал выход 1>2>3, но вывод все еще 3>2>1.

1 Ответ

1 голос
/ 05 апреля 2019

Отправленный код имеет несколько проблем:

  • внешний цикл немедленно завершается: тест должен быть j > 0 вместо j <= 0.
  • внутренний цикл должен тестировать pseudoJ чтобы избежать доступа к элементам до начала массива
  • , было бы проще увеличить индекс j во внешнем цикле и уменьшить i во внутреннем цикле.Имя pseudoJ сбивает с толку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...