当前位置:网站首页>升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
2022-08-02 23:31:00 【林慈桥】
- 冒泡排序每一轮比较元素都是从左到右,进行单项的元素交换
- 如果升序排序的最小元素在末尾,且前面的元素已经排序好了,那么我们的外循环则需要遍历n-1次,这样就产生了很多次无用的遍历和元素交换
- 我们可以从左到右遍历交换元素后,再从右到左遍历交换元素,类似于钟摆一样,直到中间元素,就排序完成了
- 鸡尾酒排序的java实现
public class Test { public static void main(String[] args) { int[] a = {2, 11, 10, 3, 9, 2, 6, 4, 5, 3, 2, 1}; cocktailSort(a); System.out.println("sort:" + Arrays.toString(a)); } /** * 鸡尾酒升序排序算法 * * @param array */ public static void cocktailSort(int array[]) { int temp;//交换元素的临时变量 int rightBoundary = array.length - 1;//无序区的右边界 int leftBoundary = 0;无序区的左边界 for (int i = 0; i < array.length / 2; i++) {//外层循环遍历的次数array.length的一半 boolean sorted = true;//有序标记,每一轮都设置为true int rightLastExchange = 0;//最后一次交换元素的右边界位置 for (int j = leftBoundary; j < rightBoundary; j++) {//内层循环遍历相邻元素进行比较和交换 if (array[j] > array[j + 1]) {//相邻的前一个元素大于后一个元素则交换 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; sorted = false;//有元素交换,设置排序完成为false rightLastExchange = j;//有元素交换,记录下交换的下标 } } rightBoundary = rightLastExchange;//最后一次交换元素的下标就是下次遍历的边界 if (sorted) {//排序完成 break; } sorted = true; int leftLastExchange = 0;//最后一次交换元素的左边界位置 for (int j = rightBoundary; j > leftBoundary; j--) {//内层循环遍历相邻元素进行比较和交换 if (array[j] < array[j - 1]) {//相邻的后一个元素小于前一个元素则交换 temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; sorted = false;//有元素交换,设置排序完成为false leftLastExchange = j;//有元素交换,记录下交换的下标 } } leftBoundary = leftLastExchange;//最后一次交换元素的下标就是下次遍历的边界 if (sorted) {//排序完成 break; } } } }
- 鸡尾酒算法可以再特定的条件小减少排序的遍历次数,但是实现的代码量却增加了一倍,只有在大部分元素已经有序的情况下能发挥优势
边栏推荐
- Test | ali internship 90 days in life: from the perspective of interns, talk about personal growth
- LVM与磁盘配额原理及配置
- resubmit 渐进式防重复提交框架简介
- 华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)
- 心电记录电路设计(框图/波形以及信号放大器的选择)
- 十年架构五年生活-03作为技术组长的困扰
- 记一次mysql查询慢的优化历程
- Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时
- 脂溶性胆固醇-聚乙二醇-叠氮,Cholesterol-PEG-Azide,CLS-PEG-N3
- scala 集合通用方法
猜你喜欢
Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时
如何使用vlookup+excel数组公式 完成逆向查找?
CIO修炼手册:成功晋升CIO的七个秘诀
Visual Studio中vim模拟器
Cholesterol-PEG-Amine,CLS-PEG-NH2,胆固醇-聚乙二醇-氨基脂两亲性脂质衍生物
Speech Synthesis Model Cheat Sheet (1)
VMware workstation program starts slowly
记一次mysql查询慢的优化历程
RollBack Rx Professional RMC 安装教程
如何快速对接淘宝开放平台API接口(淘宝店铺订单明文接口,淘宝店铺商品上传接口,淘宝店铺订单交易接口)
随机推荐
基于STM32设计的老人防摔倒报警设备(OneNet)
十年架构五年生活-03作为技术组长的困扰
vant-swipe自适应图片高度+图片预览
5、Citrix云桌面初始化Storefront设置
Day117.尚医通:生成挂号订单模块
数据库主键一定要自增吗?有哪些场景不建议自增?
js基础知识整理之 —— 变量和数据类型
Visual Studio中vim模拟器
停止使用 Storyboards 和 Interface Builder
D with json
【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
Controller层代码这么写,简洁又优雅!
2022 Shandong International Youth Eye Health Industry Exhibition, Vision Health Exhibition, Optometry Exhibition
【Autosar RTM】
即席查询—— Kylin使用
VMware workstation program starts slowly
flutter 时间戳转日期
漫画:怎么证明sleep不释放锁,而wait释放锁?
UE5 官方案例Lyra 全特性详解 8.如何用配置表初始化角色数据
【多线程】线程与进程、以及线程进程的调度