当前位置:网站首页>升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
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; } } } } - 鸡尾酒算法可以再特定的条件小减少排序的遍历次数,但是实现的代码量却增加了一倍,只有在大部分元素已经有序的情况下能发挥优势
边栏推荐
猜你喜欢

Find My技术|智能防丢还得看苹果Find My技术

智能电视竞争白热化,利用小程序共建生态突围

用了 TCP 协议,数据一定不会丢吗?

【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦

精心整理16条MySQL使用规范,减少80%问题,推荐分享给团队

# DWD层及DIM层构建## ,220801 ,

Cholesterol-PEG-Acid,胆固醇-聚乙二醇-羧基保持在干燥、低温环境下

Day117.尚医通:生成挂号订单模块

牛客网剑指offer刷题练习之链表中环的入口结点

用了这么多年的LinkedList,作者说自己从来不用它?为什么?
随机推荐
js基础知识整理之 —— Date和定时器
5、Citrix云桌面初始化Storefront设置
如何突破测试/开发程序员思维?一种不一样的感觉......
LVM与磁盘配额原理及配置
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
Canonical correlation analysis of CCA calculation process
WAF WebShell Trojan free to kill
语音合成模型小抄(1)
2022杭电多校第一场(K/L/B/C)
华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)
UE5 官方案例Lyra 全特性详解 8.如何用配置表初始化角色数据
2022暑假牛客多校1 (A/G/D/I)
I have been in the software testing industry for nearly 20 years, let me talk to you about today's software testing
mPEG-Cholesterol,mPEG-CLS,甲氧基-聚乙二醇-胆固醇可用于脂质体制备
年近30 ,4月无情被辞,想给划水的兄弟提个醒...
Directing a non-relational database introduction and deployment
嵌入式分享合集26
漫画:怎么证明sleep不释放锁,而wait释放锁?
DataGuard日常维护常见问题之数据同步异常