鸡尾酒排序算法c语言源代码,排序算法 -鸡尾酒排序
简介
鸡尾酒排序是冒泡排序的一种,又称为来回排序。它比冒泡排序要高级点, 冒泡排序的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动。算法的每一轮都是从左到右来比较元素,进行单向的位置交换。而鸡尾酒排序元素比较和交换过程是双向的。
举例,有数组 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语言源代码,排序算法 -鸡尾酒排序相关推荐
- 我们一起来排序——使用Java语言优雅地实现常用排序算法
破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...
- c语言排序教学过程,C语言中冒泡排序算法教学设计
排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...
- 卡尔曼滤波算法c语言stm32,卡尔曼滤波算法及C语言实现_源代码
a往南向北 2019-01-16 20:39:20 11340 收藏 111 分类专栏: C语言嵌入式 文章标签: 卡尔曼滤波 C代码 卡尔曼滤波理论很容易就可以在MATLAB软件环境下实现,但是 ...
- 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)
算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...
- 快速排序算法-c语言实现,快速排序算法实现(C语言)(转)
快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据 ...
- c语言考试算法,c语言考试常用算法docx.docx
c语言考试常用算法docx 求1~100的累加和#includevoid main(){inti=1,sum=0;while (i<=100){sum+=i;i++;}printf(" ...
- c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言
FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...
- 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)
Clock页面置换算法: 6)动态给出页面调用序列并进行调度: 7)输出置换结. C++编程要? 考试用 哪位大侠 帮帮 快点 谢谢了 这很简单啊,要打字太多了.不过网上这类算法举例很少,就看你怎么理 ...
- c语言编程实现dsa算法,C语言实现DSA算法(不包括质数生成)
1.头文件部分 #include #include #include 2.判断大数是不是0或1 参见<C语言实现RSA算法> 3.大数加减乘除幂模 参见<C语言实现RSA算法> ...
- 用c语言编写银行家算法,C语言实现银行家算法
<C语言实现银行家算法>由会员分享,可在线阅读,更多相关<C语言实现银行家算法(8页珍藏版)>请在人人文库网上搜索. 1.C语言实现银行家算法(源码.运行结果)一. 源码/* ...
最新文章
- 基于shell脚本比较数字大小
- YOLOX——Win10下训练自定义VOC数据集
- 全球与中国电磁探针台市场前景规划与发展动态分析报告2021-2027年版
- Dubbo服务暴露的流程
- bat批量剪切命令_批处理剪切文件夹的dos指令怎么写
- [转载] Python字符串函数
- 『计算机视觉』Mask-RCNN_推断网络终篇:使用detect方法进行推断
- C# 获取文件名及扩展名【转】
- python语言程序设计实践教程答案上海交通大学_计算机二级教程 Python语言程序设计 第4章程序的控制结构...
- 2021-08-10小米盒子3增强版挂U盘刷v1.46版历程
- Day01 郝斌C语言自学视频之 C 语言概述
- 汽车电子技术——软件、硬件、系统集成和项目管理之学习与分享概述
- 云风:游戏数值公式的表象与本质
- qtcpsocket断开_关于QSocket的释放的一个需要注意的情况(必须先断开连接)
- 四款功能强大的优质app合集,总有一个能给你带来帮助!
- 公有云 私有云 混合云
- 使用pygame开发一个小游戏
- SATA、mSATA 、PCIe和M.2——SSD硬盘的接口
- 【数据分享】第六次、第七次人口普查深圳各街道数据
- 大咖说|中国循环经济协会朱黎阳:数字经济与循环经济协同赋能绿色低碳转型
热门文章
- 设置html除了楷体还有什么字体,css设置各种中文字体如雅黑、黑体、宋体、楷体等等...
- Mavn项目报错Could not find artifact com.ywj:SpringCloudCRM-api:jar:1.0-SNAPSHOT
- 【Source Insight】SI工具栏误触导致的恶心排版错乱问题恢复
- 【数据库2】生成txt/xml文件,ftp,oracle安装/表操作/虚表/日期/序列/索引/视图/链路/同义词/高可用性,mysql/文件入库/清理/表结构设计/交换/收集
- 为什么要用IPv6取代IPv4呢
- 用ajax下载csv格式的文件
- 前缀表达式详细解释以及代码展现
- 液压系统管路流速推荐表_管径与流速推荐表1
- 实践是检验理论的唯一方法
- 《ZigBee开发笔记》第二部分 基础篇-第5章 CC2530 PWM调光