为什么排序代码在N = 348时起作用,但是在N = 349程序挂起时呢?没有编译错误。
#define N 348
int main(void){
int n[N];
int temp;
for(int i=0;i<N;i++) n[i] = rand();
for(int i=0 ; i<N-1;){
if (n[i]<n[i+1]) {i++;continue;}
else {
temp = n[i];
n[i] = n[i+1];
n[i+1] = temp;
if (i != 0) i--;
else i++;
}
}
return 0;
}
答案 0 :(得分:4)
程序的行为与N
的值无关。
如果数组的两个连续元素彼此相等,则由于这种情况将出现无限循环
if (n[i]<n[i+1]) {i++;continue;}
else {
以及复合else语句中的该语句
if (i != 0) i--;
也就是说,当n[i]
等于n[i+1]
时,else语句将始终执行。
例如,尝试为阵列运行程序
#define N 3
//...
int n[N] = { 1, 2, 2 };
通过将条件更改为
,可以避免错误if (n[i]<=n[i+1]) {i++;continue;}
else {