前面的话:

把自己总结的排序方法分享一下,也当作自己的笔记本了
冒泡: 冒泡排序算法的主要思想是每次只比较相邻的两个元素,一轮排序之后,最大的元素就会沉到最下面(全文默认升序),然后每次循环比较,就可以得到一个已排序好的数组。

代码实现:
public static void main(String[] args) {int[] num = {8,20,1,3,9,5,41,10,11,2};//冒泡排序for (int i = 0; i < num.length-1; i++) {  //控制比较轮次for (int j = 0; j < num.length-i-1; j++) {  //控制每轮中各个元素的比较次数if (num[j]>num[j+1]) {   //升序int temp = num[j+1];num[j+1] = num[j];num[j] = temp;}}}Out(num);}//输出数组中元素
public static void Out(int[] arrs) {for (int i = 0; i < arrs.length; i++) {System.out.println(arrs[i]);}
}

经过这样的排序之后,数组就有序了!其中内循环为什么要写 num.length-i-1 呢? 因为经过一轮循环之后,最大的元素就会沉到最下面,所以在后面比较的时候就不需要再参与比较了。num[j]>num[j+1] 这个是只比较两个相邻的元素。
快速排序: 快速排序算是冒泡排序的改进算法,有很多方法可以实现,我这里用了最经典的 挖坑法 来解决问题,直接上代码。

代码实现:
static void sort(int[] a,int low,int high){int start = low;int end = high;int key = a[low];while(end>start){//从后往前比较while(end>start&&a[end]>=key)  //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较end--;if(a[end]<=key){int temp = a[end];a[end] = a[start];a[start] = temp;}//从前往后比较while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置start++;if(a[start]>=key){int temp = a[start];a[start] = a[end];a[end] = temp;}//此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用}//递归比较后面的数据//现在数组右边的都是比第一轮哨兵小的数据//数组左边的数据都是比第一轮哨兵大的数据//两边数据中不是有序的,所以后面要递归排序if(start>low) sort(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1if(end<high) sort(a,end+1,high);//右边序列。从关键值索引+1到最后一个
}
public static void main(String[] args) {int[] num = {80,16,100,35,85,20,12,90,110,5};sort(num, 0, num.length-1);//outfor (int i = 0; i < num.length; i++) {System.out.print(num[i] + " ");}
}

可能大家看的云里雾里的,下面附上小编准备的一张手写步骤纸:

自己亲手将快排的第一轮的排序过程写了出来,还算清晰,其中,在每轮排序的时候都会设置一个哨兵(key) 来和后面的数据进行比较,比较的顺序是 左右交替 进行比较。

关于冒泡、快排、二分排序算法分析相关推荐

  1. python算法题排序_python-数据结构与算法- 面试常考排序算法题-快排-冒泡-堆排-二分-选择等...

    算法可视化网站推荐---->visualgo 0.面试题中的排序算法 一些排序算法可能在工作中用的会比较少,但是面试却是不得不面对的问题.算法有助于提高我们对数据结构的理解以及提高自己的逻辑能力 ...

  2. 004 排序(冒泡快排)

    1.冒泡排序(Bubble Sort) 冒泡排序是一种交换排序. 基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止. ① 算法实现 嵌套循环.i=0,j从后往前循环,逐个与前 ...

  3. 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

    文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...

  4. c语言程序快排,C语言快排

    C语言使用快排的方式有两种,1.直接用库函数stdlib.h里的qsort函数 2.自己编写快排代码(第一种方便,第二种较为自由) qsort 的函数原型是: void qsort(void*base ...

  5. 三路快排算法加强版(三路快排的再次改进)

    :不要忘记初心哈 :) 理论依据 快排算法的缺陷及其逐一改进 三路快排尽可能三等份划分区间 通过待排元素的区间长度划分? 通过待排元素的最值之差划分? 直接使用待排元素的最大值划分? 实验数据 大范围 ...

  6. 排序算法 | 快排、冒泡、堆排、归并、基数、递归、希尔、计数

    文章目录 写在前面 排序 1. 基数排序`稳定` 2. 归并排序`稳定`merge sort 3. 快速排序`不稳定`quick sort 4. 堆排序`不稳定`heap sort 大根堆 小根堆 5 ...

  7. 【Java】七大排序(冒泡、选择、插入、快排、归并、堆排、希尔排序)

    一.相关归纳总结 1.时间复杂度 O(n^2):冒泡排序,选择排序,插入排序 O(log2n):快速排序,希尔排序,堆排序,归并排序 2.空间复杂度 O(1):插入排序.冒泡排序,选择排序,堆排序,希 ...

  8. 经典排序算法 - 冒泡和快排总结

    排序有很多种方法,但人们首先总会想起冒泡和快排,现在总结一下这两种经典算法. 1. 冒泡 public void bubbleSort(int[] a){ for (int i = 0; i < ...

  9. B - 数据结构实验之排序二:交换排序(冒泡和快排)

    Description 冒泡排序和快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的 ...

  10. Java面试宝典系列之基础面试题-常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    常见的几种排序算法-插入.选择.冒泡.快排.堆排: https://blog.csdn.net/zhangerqing/article/details/8831542

最新文章

  1. 在Windows里备份Linux分区,在Windows里分出Linux分区(Linux分区).pdf
  2. (mysql) EXPLAIN语法
  3. mysql json invalid json text_MySQL 5.7新增加的json数据类型
  4. axios取消功能的设计与实现
  5. Java IO: PipedOutputStream
  6. CentOS6.5 搭建Open***服务器
  7. nios ii小实验——第一个demo指导书
  8. Struts与Servlet的冲突
  9. linux 内核块设备驱动,你了解Linux 块设备驱动?
  10. 关于设置table样式后,不停点击按钮table中的数据会逐渐被最后一行替换的问题...
  11. JZOJ1286太空电梯
  12. python如何跳出函数_python如何跳出函数
  13. Modbus RTU转Modbus TCP网关的应用
  14. java socket发送json_Java中使用Socket发送Java对象实例
  15. java实现psd格式图片读入
  16. [MAC 苹果电脑] [装双系统] “苹果电脑装Windows双系统”讲解
  17. xml格式转换为txt格式
  18. 浏览器缓存知识+JS实现缓存
  19. 2020年南京大学软件工程考研上岸经验帖
  20. 【JVM翻译系列】「官方技术翻译」《A FIRST LOOK INTO ZGC》初探JVM-ZGC垃圾回收器

热门文章

  1. 如何读取H264文件获得每一帧的数据(VsParserPro)
  2. OpenCV基础——IplImage中的widthStep
  3. mysql5.7 bulk insert_Bulk Insert 高效快速插入数据
  4. 决战移动互联网 诺基亚开始迷失
  5. JAVA:实现Gaussian高斯算法(附完整源码)
  6. 第3章 数据库操作SQL语言---数据库原理及应用
  7. 互联网常用系统监控工具
  8. 系泊系统设计建模matlab程序,系泊系统设计-数学建模论文.docx
  9. 验证服务器支持ipv6,支持IPv6的Radius服务器的配置过程
  10. 程序实现黎曼和(定积分)