冒泡排序的时间复杂度是O(n^2),显然太慢了,能不能想办法优化呢?
当然能!
1.“ok”优化
这是最简单的优化了,就是每次判断一下有没有交换,如果没有,那么一定是已经排序完毕,不用继续了,可以用布尔型的ok判断一下。
void bubble_sort(int A[],int len)
{
bool ok=false;
for(int i=0;i<len-1;++i)
{
ok=true;
for(int j=0;j<len-1-i;++j)
{
if(A[j]>A[j+1])
{
ok=false;
swap(A[j],A[j+1]);
}
}
if(ok) break;
}
}
2.while优化
每一次都记录下最后一次交换的位置即可。
void bubble_sort(int A[],int len)
{
int flag=len-1;
while(flag>0)
{
int temp=flag;
flag=0;
for(int j=0;j<temp;++j)
{
if(A[j]>A[j+1])
{
swap(A[j],A[j+1]);
flag=j; //flag:最后一次被交换的位置(左)
}
}
}
}