主题:一个冒泡法的程序,小弟不是很明白,希望各位大虾指教!!!!谢谢!!
geshenyi
[专家分:670] 发布于 2005-08-21 12:38:00
main()
{
int a[11];
int i,j,t;
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n")
for(j=1;j<=9;j++) //(这句for是什么意思????)
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是i<=10-j????)
if(a[i]>a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;}
printf("the numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}谢谢各位大虾指教!!!!
回复列表 (共29个回复)
沙发
killercat [专家分:1330] 发布于 2005-08-21 13:06:00
。。。。怎么又发啦。
板凳
killercat [专家分:1330] 发布于 2005-08-21 13:07:00
网上有冒泡的flash,很容易理解,你仔细想想呀,就这么回事。
3 楼
YJFOX [专家分:4430] 发布于 2005-08-21 15:02:00
楼主的代码是在<<C程序设计>>的数组章里一字不差抄的
书上的解释不错,还需要问吗?
4 楼
taolucy [专家分:40] 发布于 2005-08-21 16:23:00
for循环语句啊
在循环里面比较大小啊
很容易理解啊
5 楼
iaags [专家分:2890] 发布于 2005-08-21 21:50:00
说就不好说呀.
6 楼
nakoruru [专家分:40] 发布于 2005-08-21 23:43:00
for(j=1;j<=9;j++) //(这句for是什么意思????)
总共10个数,j=1 是先把第一个最小的数求出来
直到j=9就是求第9个最小的了...剩下的那个是最大的
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是????)
是求最小的数
i<=10-j是说只比较10-j 次因为前j 个数已经按从小到大的顺序排好了
就是说j=1 时比较9次...求第一个最小的数
j=8 时比较2次...前7个数已按从小到大排好了 求第8个最小的数
j=9 时比较1次...就是比较最大的两个数了...
大家看我说的对不对...
7 楼
YJFOX [专家分:4430] 发布于 2005-08-22 09:11:00
错
应该是这样
for(j=1;j<=9;j++)
for(i=1;i<=10-j;i++)
当j=1时,i是从第1个元素到第9个元素比较,最大的放最后
当j=2时,i从第1个元素到第8个元素比较,最大的放最后
.....................
一直到j=9,那么所有元素就是从小到大排列了
8 楼
nakoruru [专家分:40] 发布于 2005-08-22 23:20:00
我怎么看都是求最小植耶...
最先求的是最小值
最后求的是最大值...
是你错了还是我错了...
9 楼
YJFOX [专家分:4430] 发布于 2005-08-22 23:47:00
是先求最大的,大的往后放
然后用10-j来缩小范围
10 楼
VictoryGuan [专家分:100] 发布于 2005-08-23 08:55:00
wohui
我来回复