冒泡排序 - 优化版
优化之后最差时间复杂度仍是O(n^2),但最好只需O(n)。
/*
* 冒泡排序 - 优化版
*/
void BubbleSort(int data[], int low, int high)
{ /* 优化版冒泡排序data[low..high) */
for (int i = low; i < high - 1; i++)
{ /* lastSwap记录最后一次交换(逆序)的位置 */
/* lastSwap之后的数据(data[lastSwap+1..high))已有序 */
int lastSwap = low;
for (int j = low; j < high - 1; j++)
{
if (data[j] > data[j + 1])
{
data[j] += data[j + 1];
data[j + 1] = data[j] - data[j + 1];
data[j] = data[j] - data[j + 1];
lastSwap = j;
}
}
/* 注意下一轮比较data[low..lastSwap],即data[low..lastSwap+1) */
high = lastSwap + 1;
}
}