回 帖 发 新 帖 刷新版面

主题:一个冒泡法的程序,小弟不是很明白,希望各位大虾指教!!!!谢谢!!

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 楼

你脑子就跟着两个循环转就行了,呵呵。

22 楼

woshi 我是了 但编译不了呀!帮忙呀 !谢谢

23 楼

这不就是起泡法吗
就10个数来说,要进行9趟比较,每趟比较最大(小)的便"沉底",而每趟比较有要进行10-i次比较.
懂了吗?
如还不懂,建议你去翻一下书,一般都会有这样的题

24 楼

比如 
3,1,5,2,7
你自己模拟一下,你怎样排序的。(需要与书上的例子,同种思想)
之后再看程序。。自己试下。FOR 语句的 用法。。
过些日子。。自然就了解的。

25 楼

for循行输出

26 楼

第一个for循环是趟数比较
第二个for循环是个数比较
每趟比较之后大的放到最后

27 楼

冒泡法:一组数组中,由上到下,两两比较,最终将较大的那个数沉到最下面
for(j=1;j<=9;j++) //(这句for是什么意思????)
表示进行十个数进行九次比较,
for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)
表示第j趟比较中需要比较的数

28 楼

[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 楼

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个数

我来回复

您尚未登录,请登录后再回复。点此登录或注册