一、传统的冒泡排序:

图解:

代码示例:

/**
* 传统冒泡排序
* @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

冒泡排序及其三种优化方案相关推荐

  1. 冒泡排序及其三种写法

    冒泡排序 冒泡排序是入门级的算法,但也有一些有趣的玩法. 通常来说,冒泡排序有三种写法: 一边比较一边向后两两交换,将最大值/最小值冒泡到最后一位: 经过优化的写法:使用一个变量记录当前轮次的比较是否 ...

  2. pdf中二维码识别的一种优化方案

    pdf中二维码识别的优化方案 ​ 博主平常所接触的业务基本都是围绕着各种财票,税票:要知道财税票的查验都需要票据的五要素,而二维码是我们能通过代码直接获取到票据五要素最直接的通道:加上国家推进票据的电 ...

  3. android圆形图片的一种优化方案(可以显示网络图片),圆形图案显示平滑的优化处理方法、系统及智能设备专利_专利查询 - 天眼查...

    1. 一种圆形图案显示平滑的优化处理方法,其特征在于,包括: A. 获取待优化圆形图案上的圆心坐标,根据所述圆心坐标及圆形图案的半径,得到图 形图案上全部点的坐标值,同时还获取全部点的透明度和RGB参 ...

  4. MySQL常见的几种优化方案

    注:原始资料来自享学课堂,自己加上整理和思考 目录 思考sql优化的几个地方,我把他做了个分类,方便理解 key_len计算方式简单介绍 一.优化点1:字段优化 覆盖索引尽量用 二.优化点2:wher ...

  5. C/C++冒泡排序4种优化方法

    冒泡排序应该是大多数人接触的第一种排序方法,虽然它的时间复杂度为O(n^2),但是它简单易懂,代码复杂度低,所以仍有很大的用武之地.最近在总结排序算法,决定重温下冒泡排序,以及它的优化方法. 冒泡排序 ...

  6. 快速排序(附优化方案)

    前言 快速排序的效率比冒泡排序相对快一些 快速排序的平均时间复杂度和最坏时间复杂度分别是O(nlgn).O(n^2) 而冒泡排序的时间复杂度是O(n^2) 关于快速排序的操作是怎样变化的看这个视频 秒 ...

  7. kvm性能优化方案---cpu/内存/磁盘/网络

    kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介 ...

  8. idgenerator 会重复吗_终极版:分布式唯一ID的几种生成方案

    在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识.商品需要唯一标识.消息需要唯一标识.事件需要唯一标识等,都需要全局唯一ID,尤其是复杂的分布式业务场景中全局唯一ID更为重要. 那么 ...

  9. 拒绝卡顿,揭秘盒马鲜生 Android 短视频秒播优化方案

    简介:短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留.因此,体验的优化就显得尤为重要.上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 And ...

最新文章

  1. c primer plus(第五版)读书笔计 第二章(3)
  2. 人物肖像速写_深度视频肖像
  3. 易语言 网页用什么编码_通常提到的编码器是干什么用的
  4. 一种移动端自适应屏幕的方法
  5. mysql update多个表_mysql update 多表 (复制)
  6. HDU 1788 Chinese remainder theorem again
  7. 第二期冲刺站立会议个人博客6(2016/5/30)
  8. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
  9. java基础中如何中断/阻塞线程和使用中断
  10. 装饰模式【设计模式学习-03】
  11. 软件工程——毕业论文管理系统
  12. 大学四年的收获及工作感悟
  13. FastReport VCL开发人员手册:自定义报表组件编写
  14. 任务队列:celery快速入门及django中celery的用法
  15. B2B平台显现5大价值特征和6种商业创新模式
  16. 最霸气的程序员辞职理由,阅后即焚!
  17. Redis之性能指标、监控方式
  18. FIRST集和FOLLOW集的计算
  19. HDU 1713 相遇周期(求两个分数的最小公倍数)
  20. 无线网卡出现windows仍在设置此设备的类配置(代码56)的问题

热门文章

  1. windows下创建vp9的VS版本
  2. CQOI 2016 不同的最小割
  3. WayOs扩展WAN口工具1.4隆重发布,同时发布BCM内置三天智能重启超级终端调试图...
  4. UNIX高手的20个习惯
  5. 【数据库实验】《小型MIS的开发》— JavaFx 开发 民航票务管理系统
  6. Linux系统管理系列(1)——文件管理权限详解 chgrp chown chmod rwx等等
  7. mysql 列 随机数_MySQL的指定范围随机数函数rand()的使用技巧
  8. 学会这2招,不用设计师,一样能做出精美炫酷的可视化大屏模板
  9. pptx库ppt演示 python_Python自动化操作PPT看这一篇就够了
  10. 第13-14讲 建图