读懂三向快速排序

今天时间有限先讲一下三向快速排序

java中原始数据类型采用的就是三向快速排序
引用数据类型采用归并排序
归并排序有自顶向下和自顶向上两种
先介绍一下快速排序

  1. 快速排序是每次取当前数组的第一个元素作为基准
  2. 最左边和最右边出现指针,分别向中间移动
  3. 右边指针遇到比基准小的暂停移动,左边指针用到比基准大的暂停移动
  4. 交换元素位置
  5. 指针相遇赋值给基准
  6. 递归进行
    排序算法地址 快速排序-简单实现

快速排序的缺点
想象一下如果按照生日日期对员工进行排序,排序过程的子数组中肯定存在大量重复的子数组,我们不应该对子数组再进行排序。

排序思想(开始时i,lt等于lo,gt等于hi)

  • a[i]小于v,将a[lt]和a[i]交换,lt和i都加一
  • a[i]大于v,将a[gt]和a[i]交换,将gt--
  • a[i]等于v,将i+1


    排序轨迹
package com.snail.basic;

public class Quick3Way {
    public static void sort(Comparable[] a, int lo, int hi) {
        if (hi <= lo) return;
        int lt = lo, i = lo + 1, gt = hi;
        Comparable v = a[lo];
        while (i<=gt){
            int cmp = a[i].compareTo(v);
            if(cmp<0)exch(a,lt++,i++);
            else if(cmp>0)exch(a,i,gt--);
            else i++;
        }
    //   现在 a[lo...lt-1]<v=a[lt..gt]<a[gt+1..hi]
        sort(a,lo,lt-1);
        sort(a,gt+1,hi);
    }
    public static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[j] = a[i];
        a[i] = t;
    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 1,482评论 0 1
  • 搞懂基本排序算法 上篇文章写了关于 Java 内部类的基本知识,感兴趣的朋友可以去看一下:搞懂 JAVA 内部类;...
    醒着的码者阅读 1,242评论 3 4
  • 最近在读< >时,了解到了很多常用的排序算法,故写一篇读书笔记记录下这些排序算法的思路和实现. 冒泡排序 冒泡排序...
    SylvanasSun阅读 726评论 0 0
  • 大家好,我叫刘备,小名备备。我是从遥远的三国时代穿越过来的,今天要给大家讲述的是我的成功之道。 大家都知道,我是中...
    deity0808阅读 779评论 0 0
  • 《告白》 你说,你买了房子。 关我什么事。 你愿意,和我一起睡吗? 可以拒绝吗? ……可以。 好,我拒绝。 为什么...
    56_素心阅读 266评论 0 0