简介

鸡尾酒排序是冒泡排序的一种,又称为来回排序。它比冒泡排序要高级点, 冒泡排序的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动。算法的每一轮都是从左到右来比较元素,进行单向的位置交换。而鸡尾酒排序元素比较和交换过程是双向的。

举例,有数组 int[] array={5,8,6,3,9,2,1,7};

在这里插入图片描述

第一趟排序:

从左往右

第一次排序:5 和 8 比较,5 小于 8 ,位置不变: 5,8,6,3,9,2,1,7

第二次排序:8 和 6 比较,8 大于 6 ,交换位置: 5,6,8,3,9,2,1,7

第三次排序:8 和 3 比较,8 大于 3 ,交换位置: 5,6,3,8,9,2,1,7

第四次排序:8 和 9 比较,8 小于 9 ,位置不变: 5,6,3,8,9,2,1,7

第五次排序:9 和 2 比较,9 大于 2 ,交换位置: 5,6,3,8,2,9,1,7

第六次排序:9 和 1 比较,9 小于 1 ,交换位置: 5,6,3,8,2,1,9,7

第七次排序:9 和 7 比较,9 小于 7 ,交换位置: 5,6,3,8,2,1,7,9

从右往左

第一次排序:9 和 7 比较,9 大于 7 ,位置不变: 5,6,3,8,2,1,7,9

第二次排序:7 和 1 比较,7 大于 1 ,位置不变: 5,6,3,8,2,1,7,9

第三次排序:1 和 2 比较,1 小于 2 ,交换位置: 5,6,3,8,1,2,7,9

第四次排序:1 和 8 比较,1 小于 8 ,交换位置: 5,6,3,1,8,2,7,9

第五次排序:1 和 3 比较,1 小于 3 ,交换位置: 5,6,1,3,8,2,7,9

第六次排序:1 和 6 比较,1 小于 6 ,交换位置: 5,1,6,3,8,2,7,9

第七次排序:1 和 5 比较,1 大于 5 ,交换位置: 1,5,6,3,8,2,7,9

第二趟排序:

从左往右

第一次排序:1 和 5 比较,1 小于 5 ,位置不变: 1,5,6,3,8,2,7,9

第二次排序:5 和 6 比较,5 小于 6 ,位置不变: 1,5,6,3,8,2,7,9

第三次排序:6 和 3 比较,6 大于 3 ,交换位置: 1,5,3,6,8,2,7,9

第四次排序:6 和 8 比较,6 小于 8 ,位置不变: 1,5,3,6,8,2,7,9

第五次排序:8 和 2 比较,8 大于 2 ,交换位置: 1,5,3,6,2,8,7,9

第六次排序:8 和 7 比较,8 大于 7 ,交换位置: 1,5,3,6,2,7,8,9

第七次排序:8 和 9 比较,8 小于 9 ,位置不变: 1,5,3,6,2,7,8,9

从右往左

第一次排序:9 和 8 比较,9 大于 8 ,位置不变: 1,5,3,6,2,7,8,9

第二次排序:8 和 7 比较,8 大于 7 ,位置不变: 1,5,3,6,2,7,8,9

第三次排序:7 和 2 比较,7 大于 2 ,位置不变: 1,5,3,6,2,7,8,9

第四次排序:2 和 6 比较,2 小于 6 ,交换位置: 1,5,3,2,6,7,8,9

第五次排序:2 和 3 比较,2 小于 3 ,交换位置: 1,5,2,3,6,7,8,9

第六次排序:2 和 5 比较,2 小于 5 ,交换位置: 1,2,5,3,6,7,8,9

第七次排序:2 和 1 比较,2 大于 1 ,位置不变: 1,2,5,3,6,7,8,9

第三趟排序:

从左往右

第一次排序:1 和 2 比较,1 小于 2 ,位置不变: 1,2,5,3,6,7,8,9

第二次排序:2 和 5 比较,2 小于 5 ,位置不变: 1,2,5,3,6,7,8,9

第三次排序:5 和 3 比较,5 大于 3 ,交换位置: 1,2,3,5,6,7,8,9

第四次排序:5 和 6 比较,5 小于 6 ,位置不变: 1,2,3,5,6,7,8,9

第五次排序:6 和 7 比较,6 小于 7 ,位置不变: 1,2,3,5,6,7,8,9

第六次排序:7 和 8 比较,7 小于 8 ,位置不变: 1,2,3,5,6,7,8,9

第七次排序:8 和 9 比较,8 小于 9 ,位置不变: 1,2,3,5,6,7,8,9

从右往左

第一次排序:9 和 8 比较,9 大于 8 ,位置不变: 1,2,3,5,6,7,8,9

第二次排序:8 和 7 比较,8 大于 7 ,位置不变: 1,2,3,5,6,7,8,9

第三次排序:7 和 6 比较,7 大于 6 ,位置不变: 1,2,3,5,6,7,8,9

第四次排序:6 和 5 比较,6 小于 5 ,位置不变: 1,2,3,5,6,7,8,9

第五次排序:5 和 3 比较,5 小于 3 ,位置不变: 1,2,3,5,6,7,8,9

第六次排序:3 和 2 比较,3 小于 2 ,位置不变: 1,2,3,5,6,7,8,9

第七次排序:2 和 1 比较,2 大于 1 ,位置不变: 1,2,3,5,6,7,8,9

排序结果 : 1,2,3,5,6,7,8,9

/**

* 鸡尾酒排序

*/

public class demo2 {

public static void main(String[] args) {

int array[] = {5,8,6,3,9,2,1,7};

sortBig(array);

System.out.println("大到小排列:"+ Arrays.toString(array));

sortSmall(array);

System.out.println("小到大排列:"+ Arrays.toString(array));

}

/**

* 从大到小排序方法

* @param array 数组

*/

private static void sortBig(int[] array) {

int temp = 0;

for (int i = 0; i < array.length/2; i++) {

//标记

boolean flag = true;

for (int j = 0; j < array.length-i-1; j++) {

if(array[j] < array[j+1]){

temp = array[j];

array[j] = array[j+1];

array[j+1] = temp;

flag = false;

}

}

if (flag)

break;

for (int j = array.length-i-1; j > i ; j--) {

if(array[j] > array[j-1]){

temp = array[j];

array[j] = array[j-1];

array[j-1] = temp;

flag = false;

}

}

if(flag)

break;

}

}

/**

* 从小到大排序

* @param array 数组

*/

private static void sortSmall(int[] array) {

int temp = 0;

for (int i = 0; i < array.length/2; i++) {

//标记

boolean flag = true;

for (int j = 0; j < array.length-i-1; j++) {

if(array[j] > array[j+1]){

temp = array[j];

array[j] = array[j+1];

array[j+1] = temp;

flag = false;

}

}

if (flag)

break;

for (int j = array.length-i-1; j > i ; j--) {

if(array[j] < array[j-1]){

temp = array[j];

array[j] = array[j-1];

array[j-1] = temp;

flag = false;

}

}

if(flag)

break;

}

}

}

大到小排列:[9, 8, 7, 6, 5, 3, 2, 1]

小到大排列:[1, 2, 3, 5, 6, 7, 8, 9]

代码外层的大循环控制着所有排序回合,大循环内包含2个小循环,第一个循环从左向右比较并交换元素,第二个小循环从右向左比较并交换元素。

鸡尾酒排序优缺点

优点:鸡尾酒排序的优点是能够在特定条件下,减小排序的回合数;

缺点:代码量增加一倍,发挥性能的优势在于大部分元素已经有序;

个人博客地址:http://blog.yanxiaolong.cn | 『纵有疾风起,人生不言弃』

鸡尾酒排序算法c语言源代码,排序算法 -鸡尾酒排序相关推荐

  1. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  2. c语言排序教学过程,C语言中冒泡排序算法教学设计

    排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...

  3. 卡尔曼滤波算法c语言stm32,卡尔曼滤波算法及C语言实现_源代码

    a往南向北 2019-01-16 20:39:20  11340  收藏 111 分类专栏: C语言嵌入式 文章标签: 卡尔曼滤波 C代码 卡尔曼滤波理论很容易就可以在MATLAB软件环境下实现,但是 ...

  4. 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

  5. 快速排序算法-c语言实现,快速排序算法实现(C语言)(转)

    快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据 ...

  6. c语言考试算法,c语言考试常用算法docx.docx

    c语言考试常用算法docx 求1~100的累加和#includevoid main(){inti=1,sum=0;while (i<=100){sum+=i;i++;}printf(" ...

  7. c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言

    FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...

  8. 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)

    Clock页面置换算法: 6)动态给出页面调用序列并进行调度: 7)输出置换结. C++编程要? 考试用 哪位大侠 帮帮 快点 谢谢了 这很简单啊,要打字太多了.不过网上这类算法举例很少,就看你怎么理 ...

  9. c语言编程实现dsa算法,C语言实现DSA算法(不包括质数生成)

    1.头文件部分 #include #include #include 2.判断大数是不是0或1 参见<C语言实现RSA算法> 3.大数加减乘除幂模 参见<C语言实现RSA算法> ...

  10. 用c语言编写银行家算法,C语言实现银行家算法

    <C语言实现银行家算法>由会员分享,可在线阅读,更多相关<C语言实现银行家算法(8页珍藏版)>请在人人文库网上搜索. 1.C语言实现银行家算法(源码.运行结果)一. 源码/* ...

最新文章

  1. 基于shell脚本比较数字大小
  2. YOLOX——Win10下训练自定义VOC数据集
  3. 全球与中国电磁探针台市场前景规划与发展动态分析报告2021-2027年版
  4. Dubbo服务暴露的流程
  5. bat批量剪切命令_批处理剪切文件夹的dos指令怎么写
  6. [转载] Python字符串函数
  7. 『计算机视觉』Mask-RCNN_推断网络终篇:使用detect方法进行推断
  8. C# 获取文件名及扩展名【转】
  9. python语言程序设计实践教程答案上海交通大学_计算机二级教程 Python语言程序设计 第4章程序的控制结构...
  10. 2021-08-10小米盒子3增强版挂U盘刷v1.46版历程
  11. Day01 郝斌C语言自学视频之 C 语言概述
  12. 汽车电子技术——软件、硬件、系统集成和项目管理之学习与分享概述
  13. 云风:游戏数值公式的表象与本质
  14. qtcpsocket断开_关于QSocket的释放的一个需要注意的情况(必须先断开连接)
  15. 四款功能强大的优质app合集,总有一个能给你带来帮助!
  16. 公有云 私有云 混合云
  17. 使用pygame开发一个小游戏
  18. SATA、mSATA 、PCIe和M.2——SSD硬盘的接口
  19. 【数据分享】第六次、第七次人口普查深圳各街道数据
  20. 大咖说|中国循环经济协会朱黎阳:数字经济与循环经济协同赋能绿色低碳转型

热门文章

  1. 设置html除了楷体还有什么字体,css设置各种中文字体如雅黑、黑体、宋体、楷体等等...
  2. Mavn项目报错Could not find artifact com.ywj:SpringCloudCRM-api:jar:1.0-SNAPSHOT
  3. 【Source Insight】SI工具栏误触导致的恶心排版错乱问题恢复
  4. 【数据库2】生成txt/xml文件,ftp,oracle安装/表操作/虚表/日期/序列/索引/视图/链路/同义词/高可用性,mysql/文件入库/清理/表结构设计/交换/收集
  5. 为什么要用IPv6取代IPv4呢
  6. 用ajax下载csv格式的文件
  7. 前缀表达式详细解释以及代码展现
  8. 液压系统管路流速推荐表_管径与流速推荐表1
  9. 实践是检验理论的唯一方法
  10. 《ZigBee开发笔记》第二部分 基础篇-第5章 CC2530 PWM调光