当前位置:网站首页>升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
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; } } } }
- 鸡尾酒算法可以再特定的条件小减少排序的遍历次数,但是实现的代码量却增加了一倍,只有在大部分元素已经有序的情况下能发挥优势
边栏推荐
- 【系统架构设计师】第三章 数据库系统
- 1 - vector R language self-study
- MySQL的多表查询(1)
- The latest real software test interview questions are shared. Are you afraid that you will not be able to enter the big factory after collecting them?
- 十年架构五年生活-04第一个工作转折点
- 新公链时代的跨链安全性解决方案
- I have been in the software testing industry for nearly 20 years, let me talk to you about today's software testing
- Find My技术|智能防丢还得看苹果Find My技术
- 基于STM32设计的老人防摔倒报警设备(OneNet)
- 精心整理16条MySQL使用规范,减少80%问题,推荐分享给团队
猜你喜欢
随机推荐
程序员如何优雅地解决线上问题?
Find My技术|智能防丢还得看苹果Find My技术
RollBack Rx Professional RMC 安装教程
十年架构五年生活-05第一次出差
No code development platform data ID introductory tutorial
记一次sql优化Using temporary; Using filesort
The latest real software test interview questions are shared. Are you afraid that you will not be able to enter the big factory after collecting them?
程序员英语自我介绍
APT level comprehensive free kill with Shell
Cholesterol-PEG-Amine,CLS-PEG-NH2,胆固醇-聚乙二醇-氨基脂两亲性脂质衍生物
Directing a non-relational database introduction and deployment
DownMusic summary record
有奖提问|《新程序员》专访“Apache之父”Brian Behlendorf
智能电视竞争白热化,利用小程序共建生态突围
Test | ali internship 90 days in life: from the perspective of interns, talk about personal growth
js基础知识整理之 —— 全局作用域
年近30 ,4月无情被辞,想给划水的兄弟提个醒...
【UE5 骨骼动画】全形体IK导致Two Bone IK只能斜着移动,不能平移
# DWD层及DIM层构建## ,220801 ,
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping的区别