|
![]() | 作者: gongguyu [gongguyu]
![]() |
登录 |
您好!我是一个小菜鸟,有几个问题,要得到您的指点! 使用冒泡法对含有10个元素的数组按从大到小的顺序进行排列!输出各元素! main() { int a[10],i,j,t; for(i=0;i<=9;i++) {printf("a[%d]=",i) scanf("%d",&a[i]); } printf("排序前: \n"); for(i=0;i<=9;i++) for(j=0;j<=9-i;j++) 这个j是什么呀。。在这个程序中J起什么作用呀! if(a[j]<a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t;} 这个是什么意思呀,看不懂! printf("排序后: \n"); for(i=0;i<=9;i++) 为什么在这里还要写一个for循环一次啊? printf("%4d",a[i]); } 这个是我在书本上抄下来的。因为我菜,所以看不太明白! 请286老师,能给我详细的解释一遍吗! [此贴被 286(unique) 在 08月12日08时32分 编辑过] |
地主 发表时间: 05-08-11 01:28 |
![]() | 回复: battle [battle] ![]() |
登录 |
main() { int a[10],i,j,t; for(i=0;i<=9;i++) {printf("a[%d]=",i) scanf("%d",&a[i]); } printf("排序前: \n"); //选择排序 for(i=0;i<=9;i++) for(j=0;j<=9-i;j++) //我也说解释不好 if(a[j]<a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t;} //如果a[j]小于a[j+1] 交换a[j]和a[j+1]的数据 printf("排序后: \n"); for(i=0;i<=9;i++) // 把排序的结果输出来 printf("%4d",a[i]); } |
B1层 发表时间: 05-08-11 11:49 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
冒泡法不是有两层循环么? for(i=0;i<=9;i++) for(j=0;j<=9-i;j++) 可以这么说 i 代表外循环的次数 一共需要10次 j 代表第i次外循环时的范围 每进行一次外循环 内循环的次数就少一次 不知道你明白了没有 你可以自己把几次比较的对象写出来看看就很容易懂了 |
B2层 发表时间: 05-08-11 12:43 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
引用: 上面那个花括号表示一个语句块 上面那个等同于 if(a[j]<a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;} } |
B3层 发表时间: 05-08-11 14:45 |
![]() | 回复: TGV_Mic [tgv] ![]() |
登录 |
冒泡法的算法思想是: 用一个记录a去和它旁边的b比较,如果a>b,则a要向后,即a要向后(向上)浮动, /******** if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t;} 这个是什么意思呀,看不懂! 这句就是这个作用***********/ 这个问题关键是有两个for循环 冒泡法其实是一种交换的思想 将带排序的元素看成是竖着排列的气泡,较小的元素比较轻,从而要往上浮,在冒泡法算法中要对这个“气泡”序列处理若干遍,这就是外层for的作用。所谓一编处理,就是自底向上检查一便这个序列,并时刻注意两者相邻元素的顺序是否正确,(这是一个重要细节,请注意思考,这是内层for的作用),如果发现两个相邻元素的顺序不对,即轻的元素在下面,就交换它们的位置,显然,处理了一遍后,最轻的元素就上浮到了最上面,在做第二遍处理的时候,由于最高位置上面的元素已经是最小的了,所以不用去比较,一般的,第i遍处理是不用考虑第i位置上面的元素的,如此下去,直到全部 楼主你是在自学吧? 我很欣赏你的精神,可是我要建议你,认真看看基础知识,你不知道j的作用,说明你不了解for的意义,更不用说你能理解应用于其下的并列语句。/********{t=a[j]; a[j]=a[j+1]; a[j+1]=t;} 这个是什么意思呀,看不懂!*******/这个看不懂说明你基本的交换思想不懂得,我也不是什么高手~我以前和你一样~ 先别看冒泡了吧~ 这是数据结构以后要学的,以后有得是时间 [此贴被 TGV_Mic(tgv) 在 08月11日19时58分 编辑过] |
B4层 发表时间: 05-08-11 19:55 |
![]() | 回复: gongguyu [gongguyu] ![]() |
登录 |
谢谢各位的指点。。。。本人非常感激!!! |
B5层 发表时间: 05-08-11 21:20 |
![]() | 回复: gongguyu [gongguyu] ![]() |
登录 |
请问,楼上的各位大哥有QQ号码吗,,,能不能加我啊 275511762 我希望有问题能问各位! |
B6层 发表时间: 05-08-12 02:15 |
![]() | 回复: 286 [unique] ![]() |
登录 |
1 请遵守这里的纪律,贴子题目不要起得含糊不清,直接把要问的内容写上。 2 所谓冒泡排序就是整个排序分很多轮,每一轮中,最大或最小的数据象汽泡一样冒上来,轮数,最大还是最小取决于具体数据和是从小到大,还是从大到小排序。 for(i=0;i<=9;i++) //轮数 for(j=0;j<=9-i;j++)//每一轮中把还没排序的区域中,把最大/小泡冒出来。 t=a[j]; a[j]=a[j+1]; a[j+1]=t;//两个数据交换常用的方法。 for(i=0;i<=9;i++) //最后这个循环与前面循环没有关系,这个循环只是把排好的顺序打印一遍,其中也排序本身已没有关系。 |
B7层 发表时间: 05-08-12 08:38 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号