鸡尾酒排序

鸡尾酒排序,也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一种变形),涟漪排序,来回排序或快乐时光排序,是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。

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)。

稳定排序。

 

posted @ 2020-05-24 12:42  hifish  阅读(34)  评论(0)    收藏  举报