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

HCIP(16)

vant-swipe adaptive picture height + picture preview

js基础知识整理之 —— Math

HCIP(17)

科研用Cholesterol-PEG-NHS,NHS-PEG-CLS,胆固醇-聚乙二醇-活性酯

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

淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口代码对接分享

2022暑假牛客多校1 (A/G/D/I)

1 - vector R language self-study

CAS:1445723-73-8,DSPE-PEG-NHS,磷脂-聚乙二醇-活性酯两亲性脂质PEG共轭物
随机推荐
合并两个excel表格工具
Speech Synthesis Model Cheat Sheet (1)
Introduction to resubmit Progressive Anti-Duplicate Submission Framework
科研用Cholesterol-PEG-NHS,NHS-PEG-CLS,胆固醇-聚乙二醇-活性酯
flutter空安全问题,平时用到的数据一定要注意
秒懂网络拓扑中的下一跳地址
js基础知识整理之 —— 全局作用域
js基础知识整理之 —— 判断语句和三元运算符
优秀论文以及思路分析02
Cholesterol-PEG-Amine,CLS-PEG-NH2,胆固醇-聚乙二醇-氨基脂两亲性脂质衍生物
CIO修炼手册:成功晋升CIO的七个秘诀
MySQL的多表查询(1)
CKAN教程之将 Snowflake 连接到 CKAN 以发布到开放数据门户
程序员英语自我介绍
2022 Shandong International Youth Eye Health Industry Exhibition, Vision Health Exhibition, Optometry Exhibition
NLP commonly used Backbone model cheat sheet (1)
机电设备制造企业,如何借助ERP系统做好客供料管理?
HVV红队 | 渗透测试思路整理
IDEA多线程调试
用了这么多年的LinkedList,作者说自己从来不用它?为什么?