冒泡排序(bubble_sort)详解

来源:互联网 发布:淘宝帐号已被限制登录 编辑:程序博客网 时间:2024/05/16 11:24

前提:

1.不考虑超大数据等特殊情况

 

#include<iostream>using namespace std;void bubble_sort(int a[],int h,int t);int main(){    //测试数据    int a[11]={1,49,60,12,-12,101,121,62,60,8,-100};    int len=sizeof(a)/sizeof(a[0]);    bubble_sort(a,0,len-1);    //输出结果    for(int i=0;i<len;i++)    {        cout<<a[i]<<" ";    }    cout<<endl;}//冒泡排序void bubble_sort(int a[],int h,int t){    int flag=0;    int temp=0;    for(int i=h;i<=t;i++)    {        for(int j=0;j<=t-1-i;j++)        {            if(a[j]>a[j+1])            {                temp=a[j];                a[j]=a[j+1];                a[j+1]=temp;                flag=1;            }        }        //加入哨兵变量flag是控制循环次数。当序列已经排好时,及时终止函数。        if(1==flag)        {            flag=0;        }else{            return;        }    }}


 

 

算法分析:

1.时间复杂度:核心在于嵌套的for循环,显而易见,复杂度为O(n^2)。

2.缺陷改进传统的冒泡排序有一大缺陷,就是无法判断排序已经完成。为了弥补这个缺陷,在程序中加入哨兵变量flag,初始值设为0,一趟循环过后,如果没有发生元素交换,则结束当前函数。 这样就可以省掉传统算法中排好序后还会进行的赘余循环。