概念:

通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可分别对这两部分记录继续进行排序,直到整个序列有序。

原理:

在数据集之中,选择一个元素作为”基准”(pivot)。

所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。

对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

图解:

例如我们有个一个数组[29 4 10 11 7]

1.首先我们先选定一个基准元素,这里我们选择10作为基准元素,然后把基准元素放在最后一个,如果选择最后一个元素作为基准元素,那么可以省略

快速排序

29 4 11 7 10

2.从左到右(除了最后的元素),循环移动小于基准元素到数据开头,留下大于等于基准元素的接在后面。

循环i = 1的时候,找到一个小于基准元素的元素4

这个时候storeIndex = 1

快速排序

4 29 11 7 10

之后循环到i=3时7小于10和storeIndex = 1换位置

4 7 11 29 10

这个时候storeIndex = 2

3.再然后,我们把基准元素放到storeIndex的位置,其他元素位置依次+1得到了我们想要的数组

4 7 10 11 29

代码:

public static void qSort(int[] arr, int head, int tail) {

if (head >= tail || arr == null || arr.length <= 1) {

return;

}

int i = head, j = tail, pivot = arr[(head + tail) / 2];

while (i <= j) {

while (arr[i] < pivot) {

++i;

}

while (arr[j] > pivot) {

--j;

}

if (i < j) {

int t = arr[i];

arr[i] = arr[j];

arr[j] = t;

++i;

--j;

} else if (i == j) {

++i;

}

}

qSort(arr, head, j);

qSort(arr, i, tail);

}

算法系列:

完整代码:

Java和Kotlin代码我均放在了GitHub上,欢迎Star!

据说,年轻、颜值高的互联网人都点了赞!

java的一段排序代码_Java常见排序算法——快速排序相关推荐

  1. java选择排序代码_Java排序算法总结之选择排序

    本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...

  2. java 排序库_Java数据库排序

    privateJButtongetJButtonOK(){if(jButtonOK==null){jButtonOK=newJButton();jButtonOK.setBounds(newRecta ...

  3. java基础面试题及答案_java常见的基础面试题(含答案及解析)

    (单选题)1.类Car里面有个方法run(),如果直接用Car.run(),则方法run前面必须用的关键词是? () A class B final C public D static 正确答案是:D ...

  4. 排序上---(排序概念,常见排序算法,直接插入,希尔排序,直接选择排序,堆排序)

    排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对 ...

  5. java简单巡回置换算法程序代码_巡回置换算法(巡回置换算法实现流程)

    LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的.LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的. 在一个请求分页系统中, ...

  6. java二分排序法原理_Java常见排序算法详解—— 二分插入排序

    转载请注明出处: 二分插入排序Binary Insert Sort 概念: 二分(折半)插入排序是一种在直接插入排序算法上进行小改动的排序算法.其与直接排序算法最大的区别在于查找插入位置时使用的是二分 ...

  7. java冒泡从大到小排序代码_Java 冒泡排序、快速排序实例代码

    冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成.这 ...

  8. java字符排序规则_java 重写排序规则,用于代码层级排序

    1.dataList 是个List> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空. 2.dataList 类型是由自己定义的,new Comparator> 也是对应 ...

  9. java怎么在哪写代码_java把这段代码不写死问题出现在哪儿

    首先这是写死的代码 ... 生成的mp3文件是可以播放的 File file = new File(dir + "cing2.wav"); File file2 = new Fil ...

最新文章

  1. [原][osg][gdal]两种方式修改tiff高程
  2. tab-pane 怎么家点击事件_有好转?辛巴燕窝事件新进展曝光。二子爷老婆首次回应银行行长送奥迪!二子爷分析小样你家老铁太精...
  3. jquery 只能输入汉字
  4. 使用jQuery实现图片懒加载原理
  5. HTMLCSS 第三天 笔记
  6. 关于JAVA中的synchronized,一段不错的解释...
  7. SpringBoot实现国际化
  8. 算法之【大整数乘法】
  9. 正态分布某一点的概率怎么算_笔记|复习金融计量中概率随笔1(样本推整体)
  10. Ubuntu搜狗输入法ctrl+alt+b冲突解决
  11. 常用邮箱SMTP/POP3地址及端口
  12. linux gprs模块 sim900芯片 ppp拨号上网
  13. makefile 目标:依赖文件写法
  14. Hadoop学习(二)---Secondary结点的配置以及HDFS的常用命令以及API的使用
  15. mybatis 小于号转义
  16. 软件类大学生求职就业攻略(四)——求职面试
  17. angular 双向绑定和事件绑定实现 输入框内容输出
  18. SOA和Web Service
  19. Vue 项目实战五 参数管理 商品列表
  20. 主题建模-corpora语料库-PCA进行降维

热门文章

  1. 关于错误Resource interpreted as Script but transferred with MIME type text_html
  2. Linux unshare命名的一些例子
  3. SAP Fiori Lead应用中Accept按钮显示隐藏的逻辑
  4. 如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误
  5. Linux系统里让vim支持markdown格式的语法高亮
  6. ABAP和Java的单元测试Unit Test
  7. 乾坤大挪移:SAP CRM WebClient UI 和 SAP Fiori UI 混搭并存
  8. ios 构建版本一直在处理中_iOS -打包上传成功,在构建版本一直刷不出来
  9. 中检测到有潜在危险的 request.form 值。_洛宁县钢结构厂房加固检测设计中心
  10. Java基础知识复习(二)