排序———冒泡排序
一、什么是冒泡排序?
冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”。
二、冒泡排序图解
三、冒泡排序代码实现
#include<iostream>//冒泡排序
using namespace std;
void Sort(int a[],int n){//a是待排序的数组,n是数组长度
for(int i=0;i<n;i++){//如上的冒泡排序图解,每次循环只能排好一个,所以n个数字需要循环n次
for(int j=0;j<n-i-1;j++){//n-i是对已经排好的不需要进行比较,再减1是针对下面防止数组越界
if(a[j]>a[j+1]){
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
}
void show(int a[],int n){
for(int i=0;i<n;i++){
cout<<a[i]<<endl;
}
}
int main(){
int a[10]={9,5,3,7,4,8,6,4,2,1};
Sort(a,10);
show(a,10);
return 0;
}
结束语
在冒泡排序中,第1轮需要比较n-1次,第2轮需要比较n-2次……第n-1轮需要比较1次。因此,总的比较次数为(n-1)+(n-2)+…+1≈n2/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
不过,交换数字的次数和输入数据的排列顺序有关。假设出现某种极端情况,如输入数据正好以从小到大的顺序排列,那么便不需要任何交换操作;反过来,输入数据要是以从大到小的顺序排列,那么每次比较数字后便都要进行交换。因此,冒泡排序的时间复杂度为O(n2)