java快排算法解读,java 快排的思路与算法
java 快排的思路与算法
有时候面试的时候的会问道Arrays.sort()是怎么实现的,我以前根本不知道是什么东西,最近点进去看了一下。直接吓傻,
//看到这个时候还是比较淡定的,可怕的事情来了。
public static void sort(int[] a) {
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
点进这里面看了一下,顿时没有看下去的欲望了。
DualPivotQuicksort//共有3079行
从网上找一个分析流程图(算法看流程图是最好的):图片网址来自http://www.tuicool.com/articles/BfY7Nz(感谢)
我们肯定没有办法一下子就写出这样的代码,所以先来了解每个算法的实现是最基本的,后面争取自己整合一个。
这次先实现的快速排序算法(DualPivotQuicksort类名一半是):
public class Sort {
static boolean less(int a, int b){
return a
}
static void exch(int array[],int i,int j){
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
static void comExch(int array[],int i,int j){
if(less(array[j],array[i]))
exch(array,i,j);
}
//扫描
static int partition(int a[],int l,int r){
int i=l-1,j=r;
int v=a[r];
for(;;){
while(less(a[++i],v));
while(less(v,a[--j])){
if(j==l)break;
}
if(i>=j)break;
exch(a,i,j);
}
exch(a,i,r);
return i;
}
//快速排序
static void quicksort(int a[],int l,int r){
if(r<=l)return;
int i=partition(a, l, r);
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
public static void main(String args[]){
int array[]={1,3,2,5,4,9,8,0};
quicksort(array,0,7);
for(Integer n:array){
System.out.println(n);
}
}
}
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的最后一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
这个只是最简单的快排,只是类的一半,另一半等我搞懂为什么要分轴区的时候再补充算法。
java快排算法解读,java 快排的思路与算法相关推荐
- java中解析xml解读,java解析xml(JDOM)
下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档. 为了简单,我用了如下XML作为要解析的XML文件: rjzjh 60.0 够简单的吧,但它对于我们关心 ...
- java reflection 作用,全方位解读Java反射(reflection)
反射:reflection JAVA提供了一种反射机制,反射也称为反省. java程序运行以后内存中就是一堆对象,除了对象什么都没有. 找对象 拉关系 瞎折腾 对象在运行过程中能否有一种机制查看自身的 ...
- 线程?对!!这就是Java线程超级细致解读---Java学习总结
线程 要想先了解线程,我们先看看什么是进程 进程是指可执行程序并存放在计算机存储器的一个指令序列,它是一个动态执行的过程 比如说,我们在平时使用电脑的时候,都会挂着微信,QQ,有时候还要打开音乐播放器 ...
- 快排算法的Java实现
快排算法的Java实现 快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边.然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现: public ...
- 经典排序算法 - 冒泡和快排总结
排序有很多种方法,但人们首先总会想起冒泡和快排,现在总结一下这两种经典算法. 1. 冒泡 public void bubbleSort(int[] a){ for (int i = 0; i < ...
- 排序算法 | 快排、冒泡、堆排、归并、基数、递归、希尔、计数
文章目录 写在前面 排序 1. 基数排序`稳定` 2. 归并排序`稳定`merge sort 3. 快速排序`不稳定`quick sort 4. 堆排序`不稳定`heap sort 大根堆 小根堆 5 ...
- 春招冲刺Day2 [高频算法题] -- 一网打尽快排
一网打尽快排 1.初出茅庐 2.小试牛刀 3.炉火纯青(快排) 4.登峰造极(随机快排) 快速排序作为十大经典排序算法之一,在面试场中屡屡出现,不是要求手写快速排序,就是快速排序的变种,为了方便复习, ...
- Java开发必学:GC+堆排+Tomcat+算法题,重难点整理
前言 一位小伙伴准备了许久的阿里Java面试,原以为能够顺利拿下offer,但在第三面还是被摁在地上反复摩擦,丧气一段时间后,小伙伴调整了心态重新尝试了一下,最终拿下了offer,今天小编把这位小伙伴 ...
- 自动排课算法核心java代码怎么实现的?点击自动排课按代码实现的?_用SQL实现的一个自动排课机制...
同学毕业设计搞的是一个排课系统,具体功能就给课程安排教室和时间.排课算法是有一定难度的,很多老师说过,至今也没有完美的排课算法,的确,排课,是一个五维交叉的复杂体系:时间.课程.教室.班级.学生.一个 ...
最新文章
- 浓烟滚滚!某市联通集体断网,谁的锅?
- php读取excel中数据库,ThinkPHP 框架实现的读取excel导入数据库操作示例
- 阿里巴巴DevOps实践指南 | 为什么DevOps的必然趋势是BizDevOps?
- 二分查找or折半查找
- html如何左侧固定div,详解左右宽度固定中间自适应html布局解决方案
- [007] 详解 .NET 程序集
- oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户
- java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)
- [JS][jQuery]清空元素html()、innerHTML= 与 empty()的区别 、remove()区别
- Android studio打包apk
- 如何切换apache中的php5与php7
- UISwitch详解
- 多线程高并发编程(1) -- 基础及详解
- 海外直播运营账号的网络线路,该如何选择?
- 【计算机操作系统】新兴操作系统
- MedianFlow中值流跟踪算法源码
- ora-07445 oracle 9,遇到ORA-07445错误
- java全栈系列之JavaSE-面向对象(方法重写)037
- 在Window 10 64位电脑上安装 OpenSSL安装过程
- 概率论与数理统计---基本概念