回 帖 发 新 帖 刷新版面

主题:请问冒泡排序法的原理的怎样的呢?

请问冒泡排序法的原理的怎样的呢?(我学的是C语言)
在如下程序中:
#include<stdio.h>
int main()
{
int mid;
int a,i=0,j;
int s[100];
printf("please input the count of numbers:\n");
scanf("%d",&a);
printf("please input numbers:\n");
scanf("%d",&s[i]);
i++;
while(i<a)
{
    scanf("%d",&s[i]);
    i++;


}
for(i=0;i<a-1;i++)
for(j=i+1;j<a;j++)
if(s[i]>s[j])
{
    mid=s[i];
    s[i]=s[j];
    s[j]=mid;

}
for(i=0;i<a;i++)
printf("%d ",s[i]);
return 0;
}

for(i=0;i<a-1;i++)
for(j=i+1;j<a;j++)
是控制什么的呢?是怎样控制的呢?
请前辈们不吝赐教!谢谢!

回复列表 (共4个回复)

沙发

控制循环,将大的数字向后移动,内循环每次可以将一趟中最大的数字移动到最后,而外循环可以将所有的数字排序;

板凳

冒泡排序法用两个FOR 语句组成二重循环来实现排序。它的排序原理是:
 如果有一组数倨:16,9,1,15,20。则先把前两个比较把大的放在后面,然后是第二个和第三个比,就这样比下去一共是4-1=3次。
        具体如下:
       第一次后:9,16,1,15
       第二次后:9,1,16,15
       第三次后:9,1,15,16
这样就把最大的数放在了最后。然后对9,1,15排序,然后是9,1。就完成了。所以要一个二重循环,起中外循环控制排序所需趟数,内循环控制各趟所需次数。

3 楼

既然所谓的冒泡就应该象个冒泡
要么小到大冒
#include<stdio.h>
#define N 4
int main() 
{
int mid;
int j, i;
int s[N];
for(i=0;i<N;i++)
  scanf("%d",&s[i]);

for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(s[j]>s[j+1])
{
    mid=s[j];
    s[j]=s[j+1];
    s[j+1]=mid;

}
for(i=0;i<N;i++)
printf(" %d",s[i]);
getch();
}
要么大到小冒
#include<stdio.h>
#define N 6
int main() 
{
int mid;
int j, i;
int s[N];
for(i=0;i<N;i++)
  scanf("%d",&s[i]);

for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--)
if(s[j]>s[j-1])
{
    mid=s[j];
    s[j]=s[j-1];
    s[j-1]=mid;

}
for(i=0;i<N;i++)
printf(" %d",s[i]);
getch();
}


那个程序三不象了
[url=http://flash.91.com/FlashPlay.aspx?id=6587]http://flash.91.com/FlashPlay.aspx?id=6587[/url]

看这个flash,我看他自己介绍的跟程序都搭不上边

我想来想去这个才是所谓的冒泡泡吧
[url=http://www.9915.com/html/program/c/496/50009.html]http://www.9915.com/html/program/c/496/50009.html[/url]


呵呵,有点错误,该了一下~

4 楼

谢谢3楼楼主!

我来回复

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