在此程序中,如果我分配了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;
}
}
}
}
答案 0 :(得分:3)
当i
为0时,当j <=n-i - 1
时条件j == n - 1
仍然为真。但是,您在索引A
的{{1}}处建立了索引,该索引比数组末尾晚了一个。
答案 1 :(得分:0)
您还需要从i
到n - 1
互斥,也要从j
到n - i - 1
互斥,否则您将越界并调用未定义的行为。所以改变:
i<=n-1;
到
i < n - 1;
和
j <=n-i - 1;
到
j < n - i - 1;