demonelf 发表于 2011-1-4 10:18:02

C语言冒泡排序法简析

C语言冒泡排序法简析/*冒泡法排序*/
   for(i=0; i<NUM-1; i++) /*外循环:控制比较趟数*/
         for(j=NUM-1; j>i; j--) /*内循环:进行每趟比较*/
   if(data<data) /*如果data大于data,交换两者的位置*/
      {temp=data;
          data=data;
          data=temp;
    };
泡排序法全攻略

排序是c语言里比较重要的一个知识点,排序的方法有多种,但我个人觉得比较简单实用的还是冒泡法排序,因为其有一个固定的模式可以套用,对于初学者或者说是理解有困难的同学十分有用。

例一

随便输入几个数,然后按从小到大或者是从大到小的顺序排列

输入五个数,按从小到大的顺序排列



//从小到大排列
#include<stdio.h>
void main()
{
        int i,j,a,temp;
        for(i=0;i<5;i++)
        {
                printf("please input a number a[%d]=",i);
                scanf("%d",&a);
        }
        for(i=4;i>0;i--)
        {
                for(j=4;j>4-i;j--)
                {
                        if(a>a)
                        {
                                temp=a;
                                a=a;
                                a=temp;
                        }
                }
        }
        for(i=0;i<5;i++)
        printf("%d\t",a);
}


从大到下就是将语句"if(a>a)"改为"if(a<a)"即可

程序分析

冒泡法顾名思义就是将一个数从下面浮上来,假设有5个数,21 56 87 6 9,

将第五个元素的值与第四个元素的值相比,如果第五个元素的值小于第四个元素的值,则交换着两个元素的值。
接下来,将第四个元素的值与第三个元素的值进行比较,按照类似的方式,如果发现下面元素的值小于上面元素的值,则交换着两个值。
将第三个元素的值与第二个元素的值比较,做同样的工作。
在这一轮比较结束时,最小值将到达最上面,可以说最小值已经浮到最上面
第二轮,从最底部的元素开始比较,直到第二个元素,因为第一个已经是最小,不需要再进行比较。
其实,就是一个for循环,最外面的循环控制循环的次数,需要有n-1次循环

固定为for(i=n-1;i>0;i--)

里面的循环从最大值开始,次数为n-1-i,

固定为for(j=n-1;j>n-1-i;j--)

循环体就是

if(a>a)

{temp=a;

a=a;

a=temp;

}

直接套用即可

云敏法 发表于 2012-2-10 06:31:11

真的谢谢了!











static/image/common/sigline.gif

http://img165.poco.cn/mypoco/myphoto/20120206/22/6463079920120206222201033.png

小米粒520 发表于 2012-2-11 21:00:52

看过必回,人品超好!











static/image/common/sigline.gif
篮球鞋www.lanqiuxie.com
页: [1]
查看完整版本: C语言冒泡排序法简析