很怪异的题目
- C/C++ code
# include <stdio.h>#define N 5int main(void){ int i, j, max,k; int a[N] = {1,1054,0,89,11}; for (i=1; i<N; i++) { if (a[i] < a[i-1]) { max = a[i]; for (j=i-1; a[j]>max; j--) { a[j+1] = a[j]; } a[j+1] = max; } } for (i=0; i<N; i++) { printf("%d ", a[i]); } printf("\n"); return 0;}
上面是一个C语言的直接插入排序,运行是正确的,但我把定义变量的顺序倒一下运行就出错,也不能说出错就是把我的数组里的数据给改了,大家不信试试看吧!我到现在也找不到原因。
- C/C++ code
# include <stdio.h>#define N 5int main(void){ int a[N] = {1,1054,0,89,11}; int i, j, max; for (i=1; i<N; i++) { if (a[i] < a[i-1]) { max = a[i]; for (j=i-1; a[j]>max; j--) { a[j+1] = a[j]; } a[j+1] = max; } } for (i=0; i<N; i++) { printf("%d ", a[i]); } printf("\n"); return 0;}
这个是把变量倒后的程序,运行后数组的元素变了。。
[解决办法]
你的插入排序是错的,导致数组越界,出现了这样诡异的结果,我以前有犯过类似的错误。加上
“j>=0”后,不管你怎样定义变量,都不会有问题。