冒泡排序,顾名思义,就是重的往下沉,轻的往上冒;是大家再熟悉不过的排序算法。
首先我们看一般的冒泡排序,具体代码如下:
#include“stdafx.h”
#include <stdlib.h>
void swap(int* a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void bubble_sort(int* a,int iSize)
{
int i,j;
for(i=0;i<iSize;i++)
{
for(j=iSize -1;j>i;j--)
{
if(a[j] < a[j-1]) //从小到大顺序排列
{
swap(a[j],a[j-1]);
}
}
}
}
可见,冒泡排序算法的时间复杂度为O(n2);
下面是对冒泡排序的优化:方式是通过设置一个标识变量,标识数列中的数是否在循环结束前就已经排好序了
具体代码如下:
void bubble_sort(int* a,int iSize)
{
int i,j;
int iFlag = 1;
for(i=0;i<iSize&&iFlag;i++)
{
iFlag = 0;
for(j=iSize -1;j>i;j--)
{
if(a[j] <a[j-1])
{
swap(a[j],a[j-1]);
iFlag= 1;
}
}
}
}
根据优化后的代码,最好的情况下,冒泡排序算法的时间复杂度为O(n);