冒泡排序及其三种优化方案
一、传统的冒泡排序:
图解:
代码示例:
/**
* 传统冒泡排序
* @author Abel
*/int[] a={3,2,5,8,4,7,6,9};
for(int i=0; i<8; i++) {for(int j=0; j<=6-i; j++) {if(a[j]>a[j+1]) {int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}
}
for(int aa: a) {System.out.println(aa);}
二、优化的冒泡排序:
1、定义一个flag,用来记录内层有没有进行交换,如果没有进行交换,则说明数组此时基本有序(已经全部有序),不用再进行判断,能够节省时间。
/**
* 冒泡排序优化一:设立flag
* @author Abel
*/int[] a={3,2,5,8,4,7,6,9};
boolean flag = true;for(int i=0; i<8 && flag; i++) {flag = false;for(int j=0; j<=6-i; j++) {if(a[j]>a[j+1]) {int temp = a[j];a[j] = a[j+1];a[j+1] = temp;flag = true;}}
}
for(int aa: a) {System.out.println(aa);
}
2、定义一个标志位pos,用来记录每一次内循环最后一次交换的位置,如果全部有序或者局部有序,i 值减小,为零的时候就停止。
/**
* 冒泡排序优化二:记录最后交换位置
* @author Abel
*/int[] a={3,2,5,8,4,7,6,9};
int i = a.length -1;while(i != 0) {int pos = 0;for(int j=0; j<i; j++) {if(a[j]>a[j+1]) {int temp = a[j];a[j] = a[j+1];a[j+1] = temp;pos = j;}}i = pos;
}for(int aa: a) {System.out.println(aa);
}
3、鸡尾酒排序(双向冒泡排序)
和传统冒泡的比较:不同的地方在于双向冒泡排序从低到高然后从高到低,而冒泡排序每次都是从低到高去比较序列里的每个元素。可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只能从一个方向进行比对,每次循环只移动一个项目
下面是双向冒泡排序的演示图:
设置一个左边标志位 left 和右边标志位 right ,每次先从左起向右冒泡,然后反过来从右起向左冒泡,并将 left 加一,right 减一,结束一次循环,以此循环直到不满足条件 left < right ,排序结束。示例代码如下:
/**
* 冒泡排序优化三:双向冒泡排序(鸡尾酒排序)
* @author Abel
*/int[] a={3,2,5,8,4,7,6,9};
int left = 0;
int right = a.length - 1;
int temp;while(left < right) {for(int i=left; i<right; i++) { //找到当前排序元素里最大的那个,放在右侧if(a[i] > a[i+1]) {temp = a[i];a[i] = a[i+1];a[i+1] = temp;}}right--;for(int j=right; j>left; j--) { //找到当前排序元素里最小的那个,放在左侧if(a[j]<a[j-1]) {temp = a[j];a[j] = a[j-1];a[j-1] = temp;}}left++;
}
for(int aa: a) {System.out.println(aa);
}
github示例代码地址:https://github.com/Abel-LiuJinQuan/BubbleSort
CSDN代码下载:https://download.csdn.net/download/abel_liujinquan/11070210
冒泡排序及其三种优化方案相关推荐
- 冒泡排序及其三种写法
冒泡排序 冒泡排序是入门级的算法,但也有一些有趣的玩法. 通常来说,冒泡排序有三种写法: 一边比较一边向后两两交换,将最大值/最小值冒泡到最后一位: 经过优化的写法:使用一个变量记录当前轮次的比较是否 ...
- pdf中二维码识别的一种优化方案
pdf中二维码识别的优化方案 博主平常所接触的业务基本都是围绕着各种财票,税票:要知道财税票的查验都需要票据的五要素,而二维码是我们能通过代码直接获取到票据五要素最直接的通道:加上国家推进票据的电 ...
- android圆形图片的一种优化方案(可以显示网络图片),圆形图案显示平滑的优化处理方法、系统及智能设备专利_专利查询 - 天眼查...
1. 一种圆形图案显示平滑的优化处理方法,其特征在于,包括: A. 获取待优化圆形图案上的圆心坐标,根据所述圆心坐标及圆形图案的半径,得到图 形图案上全部点的坐标值,同时还获取全部点的透明度和RGB参 ...
- MySQL常见的几种优化方案
注:原始资料来自享学课堂,自己加上整理和思考 目录 思考sql优化的几个地方,我把他做了个分类,方便理解 key_len计算方式简单介绍 一.优化点1:字段优化 覆盖索引尽量用 二.优化点2:wher ...
- C/C++冒泡排序4种优化方法
冒泡排序应该是大多数人接触的第一种排序方法,虽然它的时间复杂度为O(n^2),但是它简单易懂,代码复杂度低,所以仍有很大的用武之地.最近在总结排序算法,决定重温下冒泡排序,以及它的优化方法. 冒泡排序 ...
- 快速排序(附优化方案)
前言 快速排序的效率比冒泡排序相对快一些 快速排序的平均时间复杂度和最坏时间复杂度分别是O(nlgn).O(n^2) 而冒泡排序的时间复杂度是O(n^2) 关于快速排序的操作是怎样变化的看这个视频 秒 ...
- kvm性能优化方案---cpu/内存/磁盘/网络
kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介 ...
- idgenerator 会重复吗_终极版:分布式唯一ID的几种生成方案
在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识.商品需要唯一标识.消息需要唯一标识.事件需要唯一标识等,都需要全局唯一ID,尤其是复杂的分布式业务场景中全局唯一ID更为重要. 那么 ...
- 拒绝卡顿,揭秘盒马鲜生 Android 短视频秒播优化方案
简介:短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留.因此,体验的优化就显得尤为重要.上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 And ...
最新文章
- c primer plus(第五版)读书笔计 第二章(3)
- 人物肖像速写_深度视频肖像
- 易语言 网页用什么编码_通常提到的编码器是干什么用的
- 一种移动端自适应屏幕的方法
- mysql update多个表_mysql update 多表 (复制)
- HDU 1788 Chinese remainder theorem again
- 第二期冲刺站立会议个人博客6(2016/5/30)
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
- java基础中如何中断/阻塞线程和使用中断
- 装饰模式【设计模式学习-03】
- 软件工程——毕业论文管理系统
- 大学四年的收获及工作感悟
- FastReport VCL开发人员手册:自定义报表组件编写
- 任务队列:celery快速入门及django中celery的用法
- B2B平台显现5大价值特征和6种商业创新模式
- 最霸气的程序员辞职理由,阅后即焚!
- Redis之性能指标、监控方式
- FIRST集和FOLLOW集的计算
- HDU 1713 相遇周期(求两个分数的最小公倍数)
- 无线网卡出现windows仍在设置此设备的类配置(代码56)的问题
热门文章
- windows下创建vp9的VS版本
- CQOI 2016 不同的最小割
- WayOs扩展WAN口工具1.4隆重发布,同时发布BCM内置三天智能重启超级终端调试图...
- UNIX高手的20个习惯
- 【数据库实验】《小型MIS的开发》— JavaFx 开发 民航票务管理系统
- Linux系统管理系列(1)——文件管理权限详解 chgrp chown chmod rwx等等
- mysql 列 随机数_MySQL的指定范围随机数函数rand()的使用技巧
- 学会这2招,不用设计师,一样能做出精美炫酷的可视化大屏模板
- pptx库ppt演示 python_Python自动化操作PPT看这一篇就够了
- 第13-14讲 建图