当前位置:网站首页>升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
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; } } } } - 鸡尾酒算法可以再特定的条件小减少排序的遍历次数,但是实现的代码量却增加了一倍,只有在大部分元素已经有序的情况下能发挥优势
边栏推荐
- Day117. Shangyitong: Generate registered order module
- 即席查询—— Kylin使用
- Database auditing - an essential part of network security
- WAF WebShell Trojan free to kill
- 定了!8月起,网易将为本号粉丝提供数据分析培训,费用全免!
- 华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)
- js基础知识整理之 —— 闭包
- 4、Citrix MCS云桌面无法安装todesk等软件
- 分库分表索引设计:二级索引、全局索引的最佳设计实践
- 【多线程】线程与进程、以及线程进程的调度
猜你喜欢
随机推荐
Technology Sharing | How to do assertion verification for xml format in interface automation testing?
Rasa 3.x 学习系列- Rasa - Issues 4792 socket debug logs clog up debug feed学习笔记
服务间歇性停顿问题优化|得物技术
函数:计算组合数
flutter 时间戳转日期
智能电视竞争白热化,利用小程序共建生态突围
js基础知识整理之 —— 变量和数据类型
十年架构五年生活-03作为技术组长的困扰
浅谈I2C知识
我为什么又能面试一次就拿到offer
flutter 每个要注意的点
js基础知识整理之 —— 全局作用域
【多线程】Thread类的基本用法
程序员如何优雅地解决线上问题?
停止使用 Storyboards 和 Interface Builder
电压传感器: 工作原理、类型及电路图
2022第十一届财经峰会:优炫软件斩获双项大奖
解决错误:Optional int parameter ‘pageSize‘ is present but cannot be translated into a null value due to
年近30 ,4月无情被辞,想给划水的兄弟提个醒...
MySQL的多表查询(1)









