标题:帮我解释一下
只看楼主
菜鸟ぃ求助
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-10-28
结帖率:100%
已结贴  问题点数:30 回复次数:9 
帮我解释一下
冒泡排序法
#include<stdio.h>
#include<stdlib.h>
int main()
{int i, a[10],t;
printf("请输入地的面积\n");
for(i=0;i<10;i++)
    scanf("%d",&a[i]);
printf("\n");
for(int j=0;j<10-1;j++)
    for(i=0;i<10-1-j;i++)
        {
        if(a[i]>a[i+1])
        {t=a[i+1];
         a[i+1]=a[i];
         a[i]=t;
        }
        }
for(i=0;i<10;i++)
    printf("%d\t",a[i]);
    system("pause");
return 0;
}

    在for(i=0;i<10-1-j;i++)这一步中如果改为  i<10—j 的话  输出的a[1]是个很大的负数  想问,为什么不能这样算,且结果a[1]怎么回事

[ 本帖最后由 菜鸟ぃ求助 于 2013-11-11 23:56 编辑 ]
搜索更多相关主题的帖子: include system return 
2013-11-11 23:55
南国神画
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:51
专家分:124
注 册:2013-10-24
得分:5 
注意一下你的if()里面的判断条件,看看i的变化范围,i如果最大小于10,i取9的话,那么i+1呢?a[i+1]存过数么?呵呵,你自己再看看吧、、
2013-11-12 00:05
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:0 
冒泡的思路是相邻的比较,并且前面的是已经排好的,所以没必要循环到底

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-11-12 06:49
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:5 
for(int j=0;j<10-1;j++)
    for(i=0;i<10-j;i++)
        {
        if(a[i]>a[i+1])            //举个例子:当 j=0,i=9 时,那么这个 a[i+1]=a[10] 是什么东东???
        {t=a[i+1];
         a[i+1]=a[i];
         a[i]=t;
        }
        }

三十年河东,三十年河西,莫欺少年穷!
2013-11-12 11:21
heiwangguan9
Rank: 2
等 级:论坛游民
帖 子:10
专家分:11
注 册:2013-11-12
得分:1 
得好好学习学习,还不懂,以后我会懂的!
2013-11-12 12:39
菜鸟ぃ求助
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-10-28
得分:0 
回复 2楼 南国神画
恩,我试了试,丢失的数据是最大的,理解你的意思   此时的啊a[10]及最小的那个负数变成a[9]
.....
最后是a[0],a[1],a[2]三个数比及j=8的时候,但最小是那负数是a[1],为什么不是a[0]

生命不息,战斗不止!!
2013-11-12 17:34
南国神画
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:51
专家分:124
注 册:2013-10-24
得分:0 
回复 6楼 菜鸟ぃ求助
不太明白你的意思,这样说吧,丢失最大的数据是肯定的,因为冒泡排序法,第一圈排序的结果就是把最大的放在最后位置,放在了a[10]里面,至于为什么放在a[1]中,那就要根据你测试的数据分析了。。
2013-11-12 19:19
南国神画
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:51
专家分:124
注 册:2013-10-24
得分:18 
回复 6楼 菜鸟ぃ求助
好吧,我测试了一下,果然是放在a[1]里面,跟测试数据没关系,这里我大体明白怎么回事了,当你写成i<10-j时,因为j是从0-8的,所以i小于的最小数是2,那么i<2,冒泡排序每次都会把一个最大的数放在后面,那么经过8圈排序后,从[1]—[9]中的最小值就放在a[2]中,最后一轮排序,条件是i=0,i<2;i=0时也就是a[0]与a[1]的值相比较后,i=1时再把a[1]与a[2]的值相比较,自然a[2]最小,把值交换到a[1],至此循环结束了,而a[0]与a[1]却没有比较了。。。所以。。。
2013-11-12 19:40
liu229118351
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:101
注 册:2013-10-23
得分:1 
照你的算法会越界的。。。

单曲循环,需要信心+耐心+恒心
2013-11-12 21:56
菜鸟ぃ求助
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-10-28
得分:0 
回复 8楼 南国神画
恩,确实是啊
以后还要好好调试调试
谢了

生命不息,战斗不止!!
2013-11-13 15:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-423397-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.555131 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved