゛落君灬殇丶 发表于 2014-2-6 17:41:41

冒泡排序出错

本帖最后由 ゛落君灬殇丶 于 2014-2-6 17:46 编辑

#include <stdio.h>

int main(void)
{
      int bubble = {9,8,7,6,5,4,3,2,1,0};
      int i, j, temp;
      
      
      
      for (i=0; i<9; i++)
      {
                for (j=0; j<10; j++)
                {
                        if (bubble < bubble)//为什么这里改成 > 就不会出错 如果 要改成< J为什么要 < 9
                        {
                              temp = bubble;
                              bubble = bubble;
                              bubble = temp;
                        }
                }
      }
      printf("\n");
      for (i=0; i<10; i++)
      {
                printf("%d ", bubble);
      }
}

牡丹花下死做鬼 发表于 2014-2-6 18:05:13

因为数组越界了 bubble 下标是 0 - 9
for (j=0; j<10; j++) 最后一次j=9 而 bubble由于没有初始化所以读出来的是一个-XXXXXXX(具体多少我忘了你自己试试把一个没初始化的变量直接输出 输出的一定是这个值)
if (bubble > bubble) 如果是这样 应为 你定义的那些数字都比-XXXXXX大所以不会执行那个换值代码所以OK 就算数组越界了也不影响
但是if (bubble < bubble)
这样就一定会执行那些换值代码 由于没初始化 你把它赋值给temp 肯定不行啊
总结下其实你就算写>也是错的只不过这样没出发底线(读取没初始化变量可以但是不能操作)所以看起来没问题
但是写<就触发底线了

xcking 发表于 2014-2-6 19:10:52

角标越界异常,j+1到10了

゛落君灬殇丶 发表于 2014-2-6 19:22:48

牡丹花下死做鬼 发表于 2014-2-6 18:05 static/image/common/back.gif
因为数组越界了 bubble 下标是 0 - 9
for (j=0; j bubble) 如果是这样 应为 你定义的那些数字都 ...

长知识了 谢谢了哈

゛落君灬殇丶 发表于 2014-2-6 19:23:19

xcking 发表于 2014-2-6 19:10 static/image/common/back.gif
角标越界异常,j+1到10了

谢谢啦哈:lol:
页: [1]
查看完整版本: 冒泡排序出错