冒 泡 法:

目的:按要求从大到小或从小到大排序。

基本思路:对尚未排序的各元素从头到尾依次依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有N个元素,那么一共要进行n-1轮比较,第I轮要进行j=n-i次比较。(如:有5个元素,则要进行5-1轮比较。第3轮则要进行5-3次比较)

    C++为例:这例中用到外部静态数组,也可以不用,用参数传递的方法。

#include<iostream.h>

static int age[5]={21,18,20,17,19};

void main()

{

 void sort_age();    //函数原形声明

 void prt_age();     //函数原形声明

 sort_age();

 prt_age();

}

void sort_age()      //冒泡实现函数

{

 extern int size;     //引用性声明

 size=sizeof(age)/2       //计算数组大小

 for(int i=1;i<=size-1;i++)

     for(int j=0;j<=size-i;j++)

         if(age[j]>age[j+1])

         {

          int temp;

          temp=age[j];

          age[j]=age[j+1];

          age[j+1]=temp;

          }

}

void prt_age()

{

 extern int size;      //引用性声明

 for(int i=0;i<size;i++)

 cout<<"age["<<i<<"]:"<<age[i]<<endl;

}

int size      //定义性声明

 

    C语言为例:注意哦:本例a[0]不用,只用a[1]~a[10],以符合人们的习惯,所以定义为a[11]。

main()

{

 int a[11];

 int i,j,k;

 printf("intput 10 numbers:\n");

 for(i=1;i<11;i++)

     scanf("%d",&a[i]);

 printf("\n");

 for(i=1;i<=9;i++)

     for(j=1;j<=10-i;j++)

         if(a[j]>a[j+1])

         {

          k=a[j];a[j]=a[j+1];a[j+1]=k;

          }

  printf("the sorted numbers:\n");

  for(i=1;i<11;i++)

      printf("%d ",a[i]);

}