【概述】

鸡尾酒排序也称定向冒泡排序,是一种稳定的排序方法,其是原始冒泡排序的改进,也是交换排序的一种。

定向冒泡排序与冒泡排序的不同在于其从低到高比较,然后再从高到低比较,如此循环往复,直到序列有序,而冒泡排序仅是从低到高的去比较序列中的每个元素。

其实现借助两个指针来完成,一个作为头指针,负责从前向后扫描,一个作为尾指针,负责从后向前扫描,外层循环依靠指针控制数组左右边界,内层循环分别控制前后边界的排序。

【过程】

初始关键字:  『 6,5,3,1,8,7,2,4  』

第一趟排序:  『 65,3,1,8,7,2,4  』

5,『 63,1,8,7,2,4』

5,3,『 61,8,7,2,4』

5,3,1,『 68,7,2,4』

5,3,1,6,『 87,2,4』

5,3,1,6,7,『 82,4』

5,3,1,6,7,2,『 84

5,3,1,6,7,2,4,『 8

第二趟排序:『 5,3,1,6,7,2,4,8

『 5,3,1,6,72』,4,8

『 5,3,1,62』,7,4,8

『 5,3,12』,6,7,4,8

『 5,31』,2,6,7,4,8

                      『 512,3,6,7,4,8

                      『 1,2,5,3,6,7,4,8

第三趟排序: 125,3,6,7,48

1,2,53,6,7,48

                       1,2,3,56,7,48

                       1,2,3,5,67,48

                       1,2,3,5,6,748

                       1,2,3,5,6,4,78

第四趟排序: 12,3,5,647,8

                       12,3,54,6,7,8

                       12,34,5,6,7,8

                       123,4,5,6,7,8

                       12,3,4,5,6,7,8

第五趟排序: 1,234,5,67,8

1,2,3,4567,8

                       1,2,3,4,『5,67,8

                       1,2,3,4,5,67,8

第六趟排序: 1,2,3,456,7,8

1,2,34,5,6,7,8

1,2,3,4,5,6,7,8

第七趟排序:  1,2,3,456,7,8

结果:   『  1,2,3,4,5,6,7,8  』

宏观过程

【时空复杂度分析】

最好的情况,是要排序的表本身就是有序的,只需要进行 n-1 次比较,没有数据交换,因此最优时间复杂度为 O(n)

最坏的情况,是要排序的表是逆序的情况,因此供需比较 n(n-1)/2 次,并作等数量级的记录移动,因此最坏时间复杂度为 O(n^2)

而在平均情况下,时间复杂度与最坏时间复杂度同数量级,即平均时间复杂度为 O(n^2)

此外,定向冒泡排序仅需一个辅助空间,用于作记录交换的暂存单元,即空间复杂度为 O(1)

【源程序】

void cocktailSort(int a[],int n){int left=1,right=n;while(left<right){/*前半轮,将最大元素放到后面*/for(int i=left;i<right;i++)if(a[i]>a[i+1])swap(a[i],a[i+1]);right--;/*后半轮,将最小元素放到前面*/for(int i=right;i>left;i--)if(a[i-1]>a[i])swap(a[i],a[i-1]);left++;}
}

理论基础 —— 排序 —— 鸡尾酒排序相关推荐

  1. [排序]鸡尾酒排序算法实现

    作者 zhonglihao 算法名 鸡尾酒排序 Cocktail Sort 分类 排序 复杂度 % 大概是1/2 * n^2时间复杂度 形式与数据结构 Matlab代码 特性 来回顺序倒序排序 具体参 ...

  2. java-数组排序--冒泡排序、鸡尾酒排序、地精排序

    冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定 时间复杂度:O(n2) 1 public ...

  3. 算法 - 鸡尾酒排序(CocktailShaker_sort)

    目录 引言: 什么是鸡尾酒排序(CocktailShaker_sort)? 鸡尾酒排序的排序原理: 鸡尾酒排序的过程演示: Step 1 : Step 2 : Step 3 : Step 4 : St ...

  4. java 鸡尾酒排序_算法渣-排序-冒泡

    没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺:跟着算法渣一起从零学算法 定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 这个算法的名字由来 ...

  5. 排序算法之鸡尾酒排序

    鸡尾酒排序 鸡尾酒排序其实冒泡排序的一种变形,或者说改进.又称为涟漪排序.单从鸡尾酒这个名字看不出来到底是如何实现排序. 常见的冒泡排序是始终是按一个方向来进行排序,找到最大或者最小值.而鸡尾酒排序则 ...

  6. 排序(一)冒泡排序、冒泡改进——鸡尾酒排序、选择排序

    1.冒泡排序 冒泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法.它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成.这个 ...

  7. python代码实现鸡尾酒排序(双向冒泡排序)

    python代码实现鸡尾酒排序(双向冒泡排序) 鸡尾酒排序是冒泡排序的一种变形.它与冒泡排序的不同之处在于排序时是以双向在序列中进行排序. 鸡尾酒排序的原理跟冒泡排序差不多,只不过冒泡排序每一轮的比较 ...

  8. java 鸡尾酒排序_冒泡排序及优化(Java实现)

    向大端冒泡 public class BubbleSort { public static > void sort(T[] arr) { for (int i = 0, len = arr.le ...

  9. 冒泡排序和鸡尾酒排序(改进的冒泡排序)

    冒泡排序 冒泡排序是最基本的排序算法,也是排序算法中的经典的算法,也是比较简单.容易理解的算法,而且还可以对其排序过程进行优化. 冒泡排序排序过程总是大数往前放,小数往后放,相当于气泡往上升,所以称作 ...

最新文章

  1. MFC中的几个常用类——CWnd
  2. Win Server 2008中开启Areo特效
  3. IO:select、poll、epoll
  4. SAP CDS view里的association会被编译成LEFT OUTER MANY TO ONE JOIN
  5. 键盘接口和七段数码管的控制实验
  6. 微信小程序上传大于4m_微信定制小程序开发
  7. 2.3物理层下面的传输媒体
  8. 按钮提交所有数据_多人编辑,自动汇总,领导可见所有?用 SeaTable 表格更简单...
  9. 华为将推出智能显示屏产品:不同于传统电视机
  10. Asp.net MVC中使用Razor Generator实现View的单元测试
  11. c语言字符串汇编,C语言调用汇编实现字符串对换
  12. Oracle ORA-01555(快照过旧)
  13. Nerwo(原npss)邀请链接
  14. 开源免费录屏软件整理
  15. SecureCRTSecureFX_HH_x86_7.0.0.326_PortableSoft.rar下载安装百度云
  16. 免费云服务器(阿贝云服务器入门)(仅适用于windows server系统)
  17. 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱?
  18. 后缀数组+单调栈+set--bzoj4453: cys就是要拿英魂!
  19. 烂笔头投资日记20221212
  20. 特步:云共享服务,点亮“新零售”

热门文章

  1. CANOpen紧急报文
  2. python 新建文件 hdfs_python基础操作以及hdfs操作
  3. python元组和列表字典_python:列表、元组和字典
  4. 感谢前任程序员赏饭吃!
  5. 关于HashMap容量的初始化,还有这么多学问。
  6. 为什么美团全面推动 K8S 落地,咬紧牙关也要搞云原生?
  7. 2016年度最受欢迎开源项目,JEECG、JEEWX参与投票
  8. Python GUI
  9. 12.14-Linux系统优化
  10. 数据库中,连接有哪些不同类型?请说明这些类型之间的差异,以及为何在某些情形下,某种连接会比较好。...