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 快排的思路与算法相关推荐

  1. java中解析xml解读,java解析xml(JDOM)

    下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档. 为了简单,我用了如下XML作为要解析的XML文件: rjzjh 60.0 够简单的吧,但它对于我们关心 ...

  2. java reflection 作用,全方位解读Java反射(reflection)

    反射:reflection JAVA提供了一种反射机制,反射也称为反省. java程序运行以后内存中就是一堆对象,除了对象什么都没有. 找对象 拉关系 瞎折腾 对象在运行过程中能否有一种机制查看自身的 ...

  3. 线程?对!!这就是Java线程超级细致解读---Java学习总结

    线程 要想先了解线程,我们先看看什么是进程 进程是指可执行程序并存放在计算机存储器的一个指令序列,它是一个动态执行的过程 比如说,我们在平时使用电脑的时候,都会挂着微信,QQ,有时候还要打开音乐播放器 ...

  4. 快排算法的Java实现

    快排算法的Java实现 快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边.然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现: public ...

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

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

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

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

  7. 春招冲刺Day2 [高频算法题] -- 一网打尽快排

    一网打尽快排 1.初出茅庐 2.小试牛刀 3.炉火纯青(快排) 4.登峰造极(随机快排) 快速排序作为十大经典排序算法之一,在面试场中屡屡出现,不是要求手写快速排序,就是快速排序的变种,为了方便复习, ...

  8. Java开发必学:GC+堆排+Tomcat+算法题,重难点整理

    前言 一位小伙伴准备了许久的阿里Java面试,原以为能够顺利拿下offer,但在第三面还是被摁在地上反复摩擦,丧气一段时间后,小伙伴调整了心态重新尝试了一下,最终拿下了offer,今天小编把这位小伙伴 ...

  9. 自动排课算法核心java代码怎么实现的?点击自动排课按代码实现的?_用SQL实现的一个自动排课机制...

    同学毕业设计搞的是一个排课系统,具体功能就给课程安排教室和时间.排课算法是有一定难度的,很多老师说过,至今也没有完美的排课算法,的确,排课,是一个五维交叉的复杂体系:时间.课程.教室.班级.学生.一个 ...

最新文章

  1. 浓烟滚滚!某市联通集体断网,谁的锅?
  2. php读取excel中数据库,ThinkPHP 框架实现的读取excel导入数据库操作示例
  3. 阿里巴巴DevOps实践指南 | 为什么DevOps的必然趋势是BizDevOps?
  4. 二分查找or折半查找
  5. html如何左侧固定div,详解左右宽度固定中间自适应html布局解决方案
  6. [007] 详解 .NET 程序集
  7. oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户
  8. java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)
  9. [JS][jQuery]清空元素html()、innerHTML= 与 empty()的区别 、remove()区别
  10. Android studio打包apk
  11. 如何切换apache中的php5与php7
  12. UISwitch详解
  13. 多线程高并发编程(1) -- 基础及详解
  14. 海外直播运营账号的网络线路,该如何选择?
  15. 【计算机操作系统】新兴操作系统
  16. MedianFlow中值流跟踪算法源码
  17. ora-07445 oracle 9,遇到ORA-07445错误
  18. java全栈系列之JavaSE-面向对象(方法重写)037
  19. 在Window 10 64位电脑上安装 OpenSSL安装过程
  20. 概率论与数理统计---基本概念

热门文章

  1. 精准广告系统架构调研
  2. Maya摄像机动画技能学习教程
  3. HDU 4407 sum 容斥原理
  4. hdu 2199 Can you solve this equation? 二分
  5. 在mybatis中模糊查询有三种写法
  6. [Mac] mac linux 多线程下载利器 axel
  7. Tiny4412 Uboot
  8. Database项目中关于Procedure sp_refreshsqlmodule_internal的错误
  9. alias重启终端失效的问题
  10. 基于Google Reader的个人知识管理方案