理论基础 —— 排序 —— 鸡尾酒排序
【概述】
鸡尾酒排序也称定向冒泡排序,是一种稳定的排序方法,其是原始冒泡排序的改进,也是交换排序的一种。
定向冒泡排序与冒泡排序的不同在于其从低到高比较,然后再从高到低比较,如此循环往复,直到序列有序,而冒泡排序仅是从低到高的去比较序列中的每个元素。
其实现借助两个指针来完成,一个作为头指针,负责从前向后扫描,一个作为尾指针,负责从后向前扫描,外层循环依靠指针控制数组左右边界,内层循环分别控制前后边界的排序。
【过程】
初始关键字: 『 6,5,3,1,8,7,2,4 』
第一趟排序: 『 6,5,3,1,8,7,2,4 』
5,『 6,3,1,8,7,2,4』
5,3,『 6,1,8,7,2,4』
5,3,1,『 6,8,7,2,4』
5,3,1,6,『 8,7,2,4』
5,3,1,6,7,『 8,2,4』
5,3,1,6,7,2,『 8,4』
5,3,1,6,7,2,4,『 8』
第二趟排序:『 5,3,1,6,7,2,4』,8
『 5,3,1,6,7,2』,4,8
『 5,3,1,6,2』,7,4,8
『 5,3,1,2』,6,7,4,8
『 5,3,1』,2,6,7,4,8
『 5,1』,2,3,6,7,4,8
『 1』,2,5,3,6,7,4,8
第三趟排序: 1,『2,5,3,6,7,4』,8
1,2,『5,3,6,7,4』,8
1,2,3,『5,6,7,4』,8
1,2,3,5,『6,7,4』,8
1,2,3,5,6,『7,4』,8
1,2,3,5,6,4,『7』,8
第四趟排序: 1,『2,3,5,6,4』,7,8
1,『2,3,5,4』,6,7,8
1,『2,3,4』,5,6,7,8
1,『2,3』,4,5,6,7,8
1,『2』,3,4,5,6,7,8
第五趟排序: 1,2,『3,4,5,6』,7,8
1,2,3,『4,5,6』,7,8
1,2,3,4,『5,6』,7,8
1,2,3,4,5,『6』,7,8
第六趟排序: 1,2,『3,4,5』,6,7,8
1,2,『3,4』,5,6,7,8
1,2,『3』,4,5,6,7,8
第七趟排序: 1,2,3,『4,5』,6,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++;}
}
理论基础 —— 排序 —— 鸡尾酒排序相关推荐
- [排序]鸡尾酒排序算法实现
作者 zhonglihao 算法名 鸡尾酒排序 Cocktail Sort 分类 排序 复杂度 % 大概是1/2 * n^2时间复杂度 形式与数据结构 Matlab代码 特性 来回顺序倒序排序 具体参 ...
- java-数组排序--冒泡排序、鸡尾酒排序、地精排序
冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定 时间复杂度:O(n2) 1 public ...
- 算法 - 鸡尾酒排序(CocktailShaker_sort)
目录 引言: 什么是鸡尾酒排序(CocktailShaker_sort)? 鸡尾酒排序的排序原理: 鸡尾酒排序的过程演示: Step 1 : Step 2 : Step 3 : Step 4 : St ...
- java 鸡尾酒排序_算法渣-排序-冒泡
没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺:跟着算法渣一起从零学算法 定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 这个算法的名字由来 ...
- 排序算法之鸡尾酒排序
鸡尾酒排序 鸡尾酒排序其实冒泡排序的一种变形,或者说改进.又称为涟漪排序.单从鸡尾酒这个名字看不出来到底是如何实现排序. 常见的冒泡排序是始终是按一个方向来进行排序,找到最大或者最小值.而鸡尾酒排序则 ...
- 排序(一)冒泡排序、冒泡改进——鸡尾酒排序、选择排序
1.冒泡排序 冒泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法.它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成.这个 ...
- python代码实现鸡尾酒排序(双向冒泡排序)
python代码实现鸡尾酒排序(双向冒泡排序) 鸡尾酒排序是冒泡排序的一种变形.它与冒泡排序的不同之处在于排序时是以双向在序列中进行排序. 鸡尾酒排序的原理跟冒泡排序差不多,只不过冒泡排序每一轮的比较 ...
- java 鸡尾酒排序_冒泡排序及优化(Java实现)
向大端冒泡 public class BubbleSort { public static > void sort(T[] arr) { for (int i = 0, len = arr.le ...
- 冒泡排序和鸡尾酒排序(改进的冒泡排序)
冒泡排序 冒泡排序是最基本的排序算法,也是排序算法中的经典的算法,也是比较简单.容易理解的算法,而且还可以对其排序过程进行优化. 冒泡排序排序过程总是大数往前放,小数往后放,相当于气泡往上升,所以称作 ...
最新文章
- MFC中的几个常用类——CWnd
- Win Server 2008中开启Areo特效
- IO:select、poll、epoll
- SAP CDS view里的association会被编译成LEFT OUTER MANY TO ONE JOIN
- 键盘接口和七段数码管的控制实验
- 微信小程序上传大于4m_微信定制小程序开发
- 2.3物理层下面的传输媒体
- 按钮提交所有数据_多人编辑,自动汇总,领导可见所有?用 SeaTable 表格更简单...
- 华为将推出智能显示屏产品:不同于传统电视机
- Asp.net MVC中使用Razor Generator实现View的单元测试
- c语言字符串汇编,C语言调用汇编实现字符串对换
- Oracle ORA-01555(快照过旧)
- Nerwo(原npss)邀请链接
- 开源免费录屏软件整理
- SecureCRTSecureFX_HH_x86_7.0.0.326_PortableSoft.rar下载安装百度云
- 免费云服务器(阿贝云服务器入门)(仅适用于windows server系统)
- 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱?
- 后缀数组+单调栈+set--bzoj4453: cys就是要拿英魂!
- 烂笔头投资日记20221212
- 特步:云共享服务,点亮“新零售”