算法描述:
冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序。
以下面5个无序的数据为例:
40 8 15 18 12 (文中仅细化了第一趟的比较过程)
第1趟: 8 15 18 12 40
第2趟: 8 15 12 18 40
第3趟: 8 12 15 18 40
第4趟: 8 12 15 18 40
冒泡排序一般有如下两种方式实现:
例如,使用冒泡排序法对一个数组内的数据进行从小到大的排序。 例如{3,2,5,8,4,7,6};
冒泡排序后为{2,3,4,5,6,7,8};
代码如下:
#include<stdio.h>
//第一种
void BubbleSort1(int a[],int n){
int temp;
for(int i=0;i<n-1;i++){
for(int j=n-1;j>i;j--){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
}
//第二种
void BubbleSort2(int a[],int n){
int temp;
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main(void){
int i;
int a[7]={3,2,5,8,4,7,6};
//BubbleSort1(a,7);
BubbleSort2(a,7);
for(i=0;i<7;i++){
printf("%3d",a[i]);
}
}
冒泡排序算法时间复杂度O(n^2),是一种稳定排序算法。属于交换类排序,交换类还有一种排序算法叫快速排序。