1、基本思想
将数组划分为有序区和无序区,不断通过交换将较大元素移至无序区尾。若在某一趟排序中未发生交换事件时,或无序区已全部排序完时,则排序完毕。
2、最优情况:(待排序数组是正序)只用比较一次就行了。复杂度O(n)。
最差情况:(待排序数组是逆序)要比较n^2次才行,复杂度O(n^2)。
3、冒泡排序属于稳定的排序。
最坏时间复杂度O(n^2),最好时间复杂度O(n),平均时间复杂度O(n^2)。空间复杂度O(1)。
4、代码
将elem[]数组按递增进行冒泡排序
void BubbleSort(int *elem, int elemLen)
{
if(elem == NULL || elemLen == 0)
{
return;
}
bool isExchange = false;//标记是否有交换数据操作
int tempElem = 0;//交换元素时,需要用到的临时中间变量
for(int i = 0; i < elemLen; i++)
{
isExchange = false;//每趟排序前交换标记为假
for(int j = 1; j < elemLen-i; j++)
{
//比较两元素,将较大元素交换到后面
if(elem[j-1] > elem[j])
{
tempElem = elem[j-1];
elem[j-1] = elem[j];
elem[j] = tempElem;
isExchange = true;//已有交换操作,交换标记为真
}
}
if(!isExchange)
{
break;
}
}
}