论坛: 编程破解 标题: 冒泡法对含有10个元素的数组按从大到小的顺序进行排列 复制本贴地址    
作者: 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;} 这个是什么意思呀,看不懂!



上面那个花括号表示一个语句块
上面那个等同于
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号