首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

很奇异的题目

2012-09-05 
很怪异的题目C/C++ code# include stdio.h#define N 5int main(void){int i, j, max,kint a[N] {1,10

很怪异的题目

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”后,不管你怎样定义变量,都不会有问题。

热点排行