您的位置:首页 > 其它

冒泡排序(bubble_sort)详解

2013-01-23 10:40 591 查看
前提:

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,一趟循环过后,如果没有发生元素交换,则结束当前函数。 这样就可以省掉传统算法中排好序后还会进行的赘余循环。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法