鸡尾酒排序
鸡尾酒排序,也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一种变形),涟漪排序,来回排序或快乐时光排序,是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
1. 算法步骤
先找到最小的数字,把它放到第一位,然后找到最大的数字放到最后一位,然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。
2. 动图演示

3. C语言实现
void cocktail_sort(int arr[], int len) { int i, left = 0, right = len - 1; int temp; while (left < right) { for (i = left; i < right; i++) if (arr[i] > arr[i + 1]) { temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } right--; for (i = right; i > left; i--) if (arr[i - 1] > arr[i]) { temp = arr[i]; arr[i] = arr[i - 1]; arr[i - 1] = temp; } left++; } }
4. 与冒泡排序比较
以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。
5. 时间复杂度、空间复杂度、稳定性
最差时间复杂度O(n^2)。
最优时间复杂度,如果序列在一开始已经大部分排列过的话,会接近O(n)。
平均时间复杂度O(n^2)。
空间复杂度O(1)。
稳定排序。

浙公网安备 33010602011771号