主题:一个冒泡法的程序,小弟不是很明白,希望各位大虾指教!!!!谢谢!!
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个回复)
21 楼
focs [专家分:70] 发布于 2005-09-27 23:32:00
你脑子就跟着两个循环转就行了,呵呵。
22 楼
湖水 [专家分:0] 发布于 2005-11-27 20:06:00
woshi 我是了 但编译不了呀!帮忙呀 !谢谢
23 楼
lender [专家分:180] 发布于 2005-11-30 20:36:00
这不就是起泡法吗
就10个数来说,要进行9趟比较,每趟比较最大(小)的便"沉底",而每趟比较有要进行10-i次比较.
懂了吗?
如还不懂,建议你去翻一下书,一般都会有这样的题
24 楼
月无边 [专家分:30] 发布于 2007-08-06 18:40:00
比如
3,1,5,2,7
你自己模拟一下,你怎样排序的。(需要与书上的例子,同种思想)
之后再看程序。。自己试下。FOR 语句的 用法。。
过些日子。。自然就了解的。
25 楼
lan112 [专家分:0] 发布于 2007-08-07 09:46:00
for循行输出
26 楼
d昨夜烟花b [专家分:10] 发布于 2007-08-10 15:18:00
第一个for循环是趟数比较
第二个for循环是个数比较
每趟比较之后大的放到最后
27 楼
woshizhengfuzhe [专家分:0] 发布于 2007-08-10 18:57:00
冒泡法:一组数组中,由上到下,两两比较,最终将较大的那个数沉到最下面
for(j=1;j<=9;j++) //(这句for是什么意思????)
表示进行十个数进行九次比较,
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是i<=10-j????)
表示第j趟比较中需要比较的数
28 楼
firerat [专家分:110] 发布于 2008-08-18 16:26:00
[quote]嫌麻烦别学C
不过确实有一个不用第3方变量的方法来实现a和b的转换,当然也不是楼上说的什么函数
是二级考试辅导书上的,看你够不够聪明了
就a和b两个已经赋值的变量
不用别的任何变量,3个语句实现a和b的值互换[/quote]
a[i]=a[i]+a[i+1];
a[i+1]=a[i]-a[i+1];
a[i]=a[i]-a[i+1];
29 楼
firerat [专家分:110] 发布于 2008-08-18 17:06:00
9 9 9 9? 2 2 2 2 2 2
6 6 6? 2? 9 9 9? 4 4 4
8 8? 2? 6 6 6?4? 9 9? 6
2? 2? 8 8 8?8?6 6?6? 9?
4? 4 4 4 4?4 8 8?8 8?
注意2的位置变化 第二步 第三步 第四步 第一步比较4次 比较3次 比较2次 比较1次
小的上调 小的上调 小的上调 小的上调
PS:同一列的两个数旁边的?表示比较的2个数
我来回复