InsertionSort error - PullRequest
       32

InsertionSort error

0 голосов
/ 02 февраля 2019

Мне нужна помощь, чтобы понять мою ошибку.Я пытаюсь сделать сортировку вставки, но она не работает.

void insertionSort(int A[]) {
    int temp, j, d;

    for (int i = 1; i <= dim - 1; i++) {
        j = i;
        while (d > 0 && A[d-1] > A[d]) {
            temp = A[j];
            A[j] = A[j - 1];
            A[j - 1] = temp;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Я думаю, что у вас возникла следующая проблема:

  1. d следует заменить на j

  2. Прототип функции долженbe void insertionSort(int A[], int dim)

  3. Логика вставки неверна.

, так что моя модификация основана на вашем исходном коде:

void insertionSort(int A[], int dim)
{
    int temp, j;
    for (int i = 1; i < dim; i++) {
        temp = A[i];
        j = i;
        while (j > 0 && A[j - 1] > temp) {
            A[j] = A[j - 1];
            j--;
        }
        A[j] = temp;
    }
}
0 голосов
/ 02 февраля 2019

d не инициализируется, поэтому будет иметь значение мусора.и я думаю, что вы должны попытаться следовать

for (int i = 1; i <dim; i++) {
    j = i - 1;
    d = A[i];
    while(j>=0 && A[j-1] > d){ 

       /* other code */
       j = j-1;

    }
    A[j+1] = d;

}
...