版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
核心思想
第 i 趟排序对序列的前 n-i+1个元素从第一个元素开始依次作如下操作:相邻的两个元素比较大小,若前者大于后者,则两个元素交换位置,否则不交换位置。
冒泡排序的特点是该n-i+1个元素中最大值元素移到该n-i+1个元素的最后,整体效果就是值大的元素往后沉,值小的元素往前浮
冒泡排序的完整过程图示如下:
我们发现只经过了4趟比较就得出了最后的结果,针对这一情况作出如下优化:
每一趟趟排序前置flag为0,排序过程中出现元素交换动作,置flag为1;
若某趟排序结束后,flag依旧为0,则表示不需要交换,排序结束。
算法实现
冒泡排序的C语言实现如下:
void BUBBLESORT(keytype K[ ],int n)
{
int i, j, flag=1;
keytype temp;
i=n–1;
while(i>0 && flag==1){
flag=0; // 每趟排序前标志flag置0
for(j=1;j<=i;j++)
if(K[j]>K[j+1]){
temp=K[j];
K[j]=K[j+1];
K[j+1]=temp; // 交换两个元素的位置
flag=1; // 标志flag置1
}
i – –;
}
}
算法分析
泡排序法的排序趟数与原始序列中数据元素的排列有关,因此,排序的趟数为一个范围,即[1…n-1]。
冒泡排序算法的时间复杂度为O(n2);
冒泡排序方法比较适合于参加排序的序列的原始状态基本有序的情况;
冒泡排序法是稳定性排序方法;