鸡尾酒排序

作者: 半天妖 | 来源:发表于2017-08-14 19:35 被阅读57次

鸡尾酒排序算法是一种定向的冒泡排序算法,由于其来回折腾,因此又叫鸡尾酒搅拌排序、来回排序或者是涟漪排序、快乐小时排序。这个算法与冒泡排序的不同之处在于排序时是以双向在序列中进行排序的。

算法思想:

  1. 采用冒泡排序的思路,第一躺沿正方向找到最大值;
  2. 第二趟,从n-1个元素位置,沿反方向找到最小值
  3. 第三趟,从第2个元素位置,沿正方向找到第二大的值,冒泡到n-1
  4. 重复上面的操作,直到排序完成

代码实现

void cocktail_sort(int arr[], int len) {
    int i, left = 0, right = len;
    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++;
    }
}

算法分析

  • 最优的情况下,复杂度为O(n),当然,也是要引入标志位
  • 最差的情况下,复杂度为O(n^2),当然,会比冒泡排序算法性能好一点
  • 平均复杂度为O(n^2)
  • 相比于冒泡排序,不同的地方在于从低到高,然后从高到低,因此可以得到比冒泡排序稍微好一些的性能。

可以这么总结:相对于冒泡排序,采用鸡尾酒排序,性能至少不会变坏,大多数情况下能获得更好的性能。

过程举例

cocktail_sort_example.png

动态过程

Sorting_shaker_sort_anim.gif

相关文章

  • 算法之美——鸡尾酒排序

    1.概念 鸡尾酒排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一...

  • 鸡尾酒排序Cocktail Sort

    鸡尾酒排序,也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一种变形),涟漪排序,来回排序or ...

  • 鸡尾酒排序

    鸡尾酒排序 @(F1 - 算法学习)[排序|noteton] WIKI上的定义 鸡尾酒排序,也就是定向冒泡排序、鸡...

  • 排序算法(九)鸡尾酒排序

    排序算法(九)鸡尾酒排序   鸡尾酒排序(Cock-Tail-Sort)是基于冒泡排序做一点点优化而来的。冒泡排序...

  • 鸡尾酒排序

    鸡尾酒排序算法是一种定向的冒泡排序算法,由于其来回折腾,因此又叫鸡尾酒搅拌排序、来回排序或者是涟漪排序、快乐小时排...

  • 动画 | 什么是鸡尾酒排序?

    鸡尾酒排序其实就是冒泡排序的变形,它的时间复杂度和冒泡排序一样,都是O(n^2),比快速排序要慢不少。 鸡尾酒排序...

  • Java基础01 冒泡排序

    冒泡排序 Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、...

  • 常用排序算法总结

    大写的转 目录 [冒泡排序][鸡尾酒排序] [选择排序] [插入排序][二分插入排序][希尔排序] [归并排序] ...

  • Java实现几种常见排序方法

    日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序...

  • Java常用排序算法

    日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序...

网友评论

    本文标题:鸡尾酒排序

    本文链接:https://www.haomeiwen.com/subject/zucprxtx.html