在学习过程中,老师教了一个简单的排序算法——冒泡排序。比如这么说:混沌未开之际,盘古大神开天辟地,清而轻的上升为天,浊而重的下沉为地。冒泡排序就是类似把清(小)的上升,重(大)的下沉。
代码如下:
// 冒泡排序
// param a:待排序数组
// param nTotalCount:数组长度
void sortBub(int a[], int nTotalCount)
{
int nLen = nTotalCount - 1;
for (int i = 0; i < nLen; ++i)
{
for (int j = i + 1; j <= nLen; ++j)
{
if (a[i] > a[j])
{
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
}
冒泡排序算法很容易看出有两个for循环,故此容易得出时间复杂度为O(n²),那么是不是可以改进一下下呢,考虑到每排序完之后肯定是a[i]<a[i+1]的情况,并且所有的位置上的元素都比后一个元素小那么这个排序绝对是完成状态,那我们是不是可以考虑冒泡排序只比较相邻两个数据呢?一条链上1...n, n个数据,两两比较相邻数据,并且还要有一个标志位来特殊判断下结束状态,那么代码就呼之欲出了。
// 冒泡排序改进版
// param a:待排序数组
// param nTotalCount:数组长度
voi