没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺;跟着算法渣一起从零学算法

定义

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”

算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。

演示

对数组[5,6,3,1,8,7,2,4]进行冒泡排序

/**

* 传统写法

* @param sorts

*/

private static void bubbleSort(int [] sorts){

for (int i=0;i

for (int j= 0;j

if(sorts[j]

swap(sorts,j,j+1);

}

}

}

}

private static void swap(int []sorts,int i,int j){

int tmp = sorts[i];

sorts[i] = sorts[j];

sorts[j] = tmp;

}

改进

有序

如果一个数组本身就是有序的,或者部分已经有序

比如:[8,7,6,5,4,3,1,2]

假如现在有一个长度10000的数组,前1000无序,后9000有序并且大于前1000数据。用上面这种方法,数据交换次数在1000之内,但是剩下9000的数据虽然没有交换,但是每次循环都会进行比较。剩下9000数据已经有序了,我们不要对它们去进行判断浪费不必要的时间/**

* 如果部分已经排序,设置一个flag,有序就跳出循环

* @param sorts

*/

private static void bubbleSort1(int [] sorts){

for (int i=0;i

boolean flag = false;

for (int j= 0;j

if(sorts[j]

swap(sorts,j,j+1);

flag = true;

}

}

if(!flag) {

break;

}

}

}

鸡尾酒排序

鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。

算法

/**

* 鸡尾酒排序,定向冒泡排序

* @param sorts

*/

private static void bubbleSort2(int [] sorts){

int i = 0;

int j = sorts.length-1;

while (i <= j) {

for(int s = i;s

if(sorts[s]

swap(sorts, s, s + 1);

}

}

System.out.println(JSON.toJSONString(sorts));

for(int e = j;e>i;e--) {//从右往左

if(sorts[e] > sorts[e-1]) {

swap(sorts, e, e - 1);

}

}

j--;i++;

System.out.println(JSON.toJSONString(sorts));

}

}

总体上,鸡尾酒排序可以获得比冒泡排序稍好的性能。但是完全逆序时,鸡尾酒排序与冒泡排序的效率都非常差

时间复杂度如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。

如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

BestAverageWorstMemoryStablenn^2n^21Stable

java 鸡尾酒排序_算法渣-排序-冒泡相关推荐

  1. java 英文字符串排序_英文字符串排序算法

    编程工作偶尔会遇到一些不常见问题需要处理,学编程处理问题也难免需要熟悉一些算法 以前学习的时候就遇到过一个看似简单的排序算法问题,当时的解决办法是我没有用过的,在此记录一下'' 问题 - 英文字符串排 ...

  2. java 桶排序_[图解] 桶排序

    桶排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序都是基于比较的排序,而桶排序提出了一种新的思路,即基于数据状态的排序. 1. 桶排序的 ...

  3. java字符串排序_对字符串排序持一种宽容的心态

    在Java中一涉及中文处理就会冒出很多问题来,其中排序也是一个让人头疼的课题,我们来看下面的代码: 上面的代码定义一个数组,然后进行升序排序,我们期望的结果是按照拼音升序排列,即为李四.王五.张三,但 ...

  4. c++ sort 从大到小排序_算法的艺术:MySQL order by对各种排序算法的巧用

    在 [精华]洞悉MySQL底层架构:游走在缓冲与磁盘之间 这篇文章中,我们介绍了索引树的页面怎么加载到内存中,如何淘汰,等底层细节.这篇文章我们从比较宏观的角度来看MySQL中关键字的原理.本文,我们 ...

  5. shell sort 最后一列排序_算法实现系列(1)—— 排序算法

    1.冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法.它重复地遍历过要排序的数列,每次比较两个元素,如果它们的顺序不符合预期,就把它们的位置交换过来.遍历数列的工作是重复地进行直到没有 ...

  6. Java指令屏障_指令重排序和内存屏障

    sap hana计算技术项目实战指南内存 61元 (需用券) 去购买 > 一.指令重排序 指令重排序分为三种,分别为编译器优化重排序.指令级并行重排序.内存系统重排序.如图所示,后面两种为处理器 ...

  7. arraylist java 排序_「arraylist排序」java ArrayList的两种排序方法 - seo实验室

    arraylist排序 1.ArrayList使用排序的初衷 我们知道ArrayList的好处是可以不用限定容器的大小,他会根据元素的增加自己扩大.但是存储进去的数据类型都会变成object,虽然每个 ...

  8. 希尔排序python 简书_数据结构_排序_直接插入+希尔排序

    数据结构_排序_直接插入排序+希尔排序 其实主要是为了讲述希尔排序,不过插入排序是希尔排序的基础,因此先来讲直接插入排序. 一.直接插入排序 1.原理 下标 0 1 2 3 4 5 6 7 8 -- ...

  9. shell按照时间排序_【经典排序】希尔排序

    希尔排序 简介: 希尔排序,英文Shell's sort,是一位叫D.L.Shell的老哥在1959就提出来的算法,是<插入排序>的一种又称"缩小增量排序"(Dimin ...

最新文章

  1. win7下安装docker
  2. asp.net中获取当前url的方法
  3. c++备忘录模式mememto
  4. Tomcat启动阻塞变慢
  5. LeetCode 1971. Find if Path Exists in Graph(图的遍历)
  6. 基于APMSSGA-LSTM的容器云资源预测
  7. windows2008R2+IIS部署python Django的web环境
  8. java高并发日志_高并发下log4j的性能瓶颈
  9. Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core“
  10. linux 增加虚拟设备,第一篇Zstack之创建虚拟机
  11. 滚动率分析(Roll Rate Analysis)
  12. 探索生产计划排程(APS)的发展历程
  13. 南开计算机考研难么,我的一点考研心得
  14. 基于混沌的一般彩色图像加密算法的Matlab实现
  15. 智课雅思词汇---二十六、形容词后缀-ble
  16. ipa 修改服务器地址,iOS重签名 – ipa包(服务器适用)
  17. 机器学习及SparkMLlib简介
  18. 卧槽!百度网盘宣布 VIP 开放免费领取!亲测有效!!
  19. 二级联动 三级联动 多级联动 无限级联动下拉列表或菜单专题
  20. MS17-010(永恒之蓝)适合Windows 2008r2的补丁如何打?

热门文章

  1. 关于图像的灰度值范围是0-1还是0-255的正确理解运用
  2. MW150UH驱动程序Linux,MW150UH V2.0_20170607驱动程序
  3. 无人值守安装RHEL6
  4. 数据恢复基础和进阶教程(三)
  5. 又一程序员删库跑路被拘留?教你如何一键恢复!
  6. 20款 密码破解工具
  7. 2022-2028全球与中国纳米沉淀碳酸钙市场现状及未来发展趋势
  8. 找工作面试_求职面试和获得Web开发工作的提示
  9. Google Pixel 2 相机测试
  10. 帆软FineReport本地部署springboot