java的一段排序代码_Java常见排序算法——快速排序
概念:
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可分别对这两部分记录继续进行排序,直到整个序列有序。
原理:
在数据集之中,选择一个元素作为”基准”(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常见排序算法——快速排序相关推荐
- java选择排序代码_Java排序算法总结之选择排序
本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...
- java 排序库_Java数据库排序
privateJButtongetJButtonOK(){if(jButtonOK==null){jButtonOK=newJButton();jButtonOK.setBounds(newRecta ...
- java基础面试题及答案_java常见的基础面试题(含答案及解析)
(单选题)1.类Car里面有个方法run(),如果直接用Car.run(),则方法run前面必须用的关键词是? () A class B final C public D static 正确答案是:D ...
- 排序上---(排序概念,常见排序算法,直接插入,希尔排序,直接选择排序,堆排序)
排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对 ...
- java简单巡回置换算法程序代码_巡回置换算法(巡回置换算法实现流程)
LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的.LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的. 在一个请求分页系统中, ...
- java二分排序法原理_Java常见排序算法详解—— 二分插入排序
转载请注明出处: 二分插入排序Binary Insert Sort 概念: 二分(折半)插入排序是一种在直接插入排序算法上进行小改动的排序算法.其与直接排序算法最大的区别在于查找插入位置时使用的是二分 ...
- java冒泡从大到小排序代码_Java 冒泡排序、快速排序实例代码
冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成.这 ...
- java字符排序规则_java 重写排序规则,用于代码层级排序
1.dataList 是个List> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空. 2.dataList 类型是由自己定义的,new Comparator> 也是对应 ...
- java怎么在哪写代码_java把这段代码不写死问题出现在哪儿
首先这是写死的代码 ... 生成的mp3文件是可以播放的 File file = new File(dir + "cing2.wav"); File file2 = new Fil ...
最新文章
- [原][osg][gdal]两种方式修改tiff高程
- tab-pane 怎么家点击事件_有好转?辛巴燕窝事件新进展曝光。二子爷老婆首次回应银行行长送奥迪!二子爷分析小样你家老铁太精...
- jquery 只能输入汉字
- 使用jQuery实现图片懒加载原理
- HTMLCSS 第三天 笔记
- 关于JAVA中的synchronized,一段不错的解释...
- SpringBoot实现国际化
- 算法之【大整数乘法】
- 正态分布某一点的概率怎么算_笔记|复习金融计量中概率随笔1(样本推整体)
- Ubuntu搜狗输入法ctrl+alt+b冲突解决
- 常用邮箱SMTP/POP3地址及端口
- linux gprs模块 sim900芯片 ppp拨号上网
- makefile 目标:依赖文件写法
- Hadoop学习(二)---Secondary结点的配置以及HDFS的常用命令以及API的使用
- mybatis 小于号转义
- 软件类大学生求职就业攻略(四)——求职面试
- angular 双向绑定和事件绑定实现 输入框内容输出
- SOA和Web Service
- Vue 项目实战五 参数管理 商品列表
- 主题建模-corpora语料库-PCA进行降维
热门文章
- 关于错误Resource interpreted as Script but transferred with MIME type text_html
- Linux unshare命名的一些例子
- SAP Fiori Lead应用中Accept按钮显示隐藏的逻辑
- 如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误
- Linux系统里让vim支持markdown格式的语法高亮
- ABAP和Java的单元测试Unit Test
- 乾坤大挪移:SAP CRM WebClient UI 和 SAP Fiori UI 混搭并存
- ios 构建版本一直在处理中_iOS -打包上传成功,在构建版本一直刷不出来
- 中检测到有潜在危险的 request.form 值。_洛宁县钢结构厂房加固检测设计中心
- Java基础知识复习(二)