Почему я не могу присвоить мне равный 0? - PullRequest
0 голосов
/ 05 мая 2019

В этой программе, если я назначаю i=0, то почему я получаю -8320909 вместо отсортированного массива, и все же, если я присваиваю значение 1, оно работает нормально?Так что же делает это изменение?

#include <stdio.h>

void Bubblesort(int *A, int n) {
    int i, j, temp;
    for (i = 1; i <= n - 1; i++) {
        for (j = 0; j <= n - i - 1; j++) {
            if (A[j] > A[j + 1]) {
                temp = A[j];
                A[j] = A[j + 1];
                A[j + 1] = temp;
            }
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 05 мая 2019

Когда i равно 0, тогда условие j <=n-i - 1 остается верным, когда j == n - 1.Однако вы индексируете в A по индексу j + 1, который находится за концом массива.

0 голосов
/ 05 мая 2019

Вам необходимо перейти от i к n - 1 эксклюзиву и от j до n - i - 1 эксклюзиву, иначе вы выйдете за пределы и вызовете неопределенное поведение.Так что измените:

i<=n-1;

на

i < n - 1;

и

j <=n-i - 1;

на

j < n - i - 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...