
冒泡排序的基本原理:设想被排序的数组R[0—n-1]竖直排列,每个元素R[i]作重量为R[i]的气球,根据轻气球不能在重气球下面的原则,从下往上扫描数组R,凡是扫描到违反本规则的数组元素,则使其交换。循环进行,直到该数组中任意两个元素都是轻的在上,重的在下面为止。
实例程序:
#include<stdio.h>
#define N 9
main()
{
int R[N]={3,9,6,4,7,1,2,8,5};
int i,j,temp,exchange;
printf("排序前:");
for (i=0;i<9;i++) printf("%d",R[i]);
printf("\n");
for (i=0;i<N;i++)
{
exchange=0;
for (j=N-2;j=i;j--)
{
if (R[j+1]<R[j])
{
temp=R[j+1];R[j+1]=R[j];R[j]=temp;
}
}
exchange=1;
if (!exchange) break;
}
printf ("排序后:);
for (i=0;i<N;i++) printf("%d",R[i]);
printf("\n");
}
过程分析:初始序列:3,9,6,4,7,1,2,8,5
i=0,j取7--0;j=7:比较R[7] 和R[8],8>5,所以交换,数列为3,9,6,4,7,1,2,5,8;
j=6:比较R[6]和R[7],2<5,不交换;
j=5:比较R[5]和R[6],1<2,不交换
j=4:比较R[4]和R[5],7>1,交换,序列为3,9,6,4,1,7,2,5,8;
j=3:比较R[3]和R[4],4>1,交换,序列为3,9,6,1,4,7,2,5,8;
j=2:比较R[2]和R[3],6>1,交换,序列为3,9,1,6,4,7,2,5,8;
j=1:比较R[1]和R[2],9>1,交换,序列为3,1,9,6,4,7,2,5,8;
j=0:比较R[0]和R[1],3>1,交换,序列为1,3,9,6,4,7,2,5,8;
当i取其他值时,原理相同。


