三路快速排序算法基本原理

-不需要多次操作重复元素
-适用于重复元素较多的情况
-将序列分为三个部分

若e=v,把e并入=v的部分

若e小于v,把e并入小于v的部分

若e大于v,把e并入大于v的部分

排序完成后的最终形态

具体实现

    // 三路快速排序算法,对解决重复性高的元素集合效率高,不需要大量操作重复元素public static <T extends Comparable<? super T>> void quickSort3(T[] arr, int n) {sonOfQuickSort3(arr, 0, n - 1);}// 对arr[l...r]部分进行三路快速排序private static <T extends Comparable<? super T>> void sonOfQuickSort3(T[] arr, int l, int r) {// 当n小到一定程度时,插入排序比归并排序快if (r - l <= 15) {// 当分块中元素为15+1时,换成插入排序SelectionSort.insertionSort(arr, r, l);return;}// partitionswap(arr[l], arr[(int) (Math.random() * (r - l + 1)) + l]);T v = arr[l];// arr[l+1,lt]<vint lt = l;// arr[gt,r]>vint gt = r + 1;// arr[lt+1,i)==vint i = l + 1;while (i < gt) {if (arr[i].compareTo(v) < 0) {swap(arr[i], arr[lt + 1]);lt++;i++;} else if (arr[i].compareTo(v) > 0) {swap(arr[i], arr[gt - 1]);gt--;} else {i++;}}swap(arr[l], arr[lt]);sonOfQuickSort3(arr, l, lt - 1);sonOfQuickSort3(arr, gt, r);}

双路快速排序算法消耗时间164ms
三路快速排序算法消耗时间64ms

Java三路快速排序相关推荐

  1. java实现快速排序算法

    排序算法传送: 排序算法--java实现冒泡排序 排序算法--java实现选择排序 排序算法--java实现直接插入排序 排序算法--java实现二分法排序 排序算法--java实现希尔排序 排序算法 ...

  2. 史上最清晰的三路快速排序

    更多精彩文章,请关注公众号[程序员小熊]. 排序算法不论是在刷题还是面试都经常遇到,掌握它能提升自己的算法功力从而增加自己面试通过的几率. 本文主要介绍一下三路快排,并以微软的一道面试题 leetco ...

  3. JAVA实现-快速排序

    JAVA实现-快速排序 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 ...

  4. 使用 Java 实现快速排序(详解)

    一.概述 最近在看一些面试题,发现很多面试过程中都会要求手写快速排序,查阅一些博客发现别人写的并不是特别清楚而且也很难记住,所以为了更好的掌握这个算法,所以在这篇文章中,将自己的学习过程记录下来,你将 ...

  5. 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)

    分治法在排序算法中的应用--快速排序 时间复杂度:平均O(nlogn),最坏O(n^2) 如果说归并排序是按照元素在数组中的位置划分的话,那么快速排序就是按照元素的值进行划分.划分方法由两种,本节将主 ...

  6. java nodelist 快速排序,【Leetcode】Sort List in java,你绝对想不到我是怎么做的^^我写完过了我自己都觉得好jian~...

    Sort a linked list inO(nlogn) time using constant space complexity. 大家看完题目估计跟我一样啦...都在想哪些是nlogn啊~快速排 ...

  7. java里面快速排序_Java:快速排序

    快速排序相当于冒泡排序的进化版本,优点是速度比冒泡排序更快,缺点是写起来逻辑比冒泡排序啰嗦一点,没那么直观. 快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的.每次排序的时候 设置一个基准 ...

  8. Java实现快速排序 Quick Sort

    本文带来八大排序算法之快速排序算法. 快速排序(QuickSort)是对冒泡排序的一种改进.基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小, ...

  9. Java【快速排序、插入排序、简单选择排序...】【八大排序-综合实验】

    目   录 1.快速排序 1.1.概念+举例 1.2.完整代码 2.插入排序 2.1.概念+举例 2.2.完整代码 3.简单选择排序 3.1.概念+举例 3.2.完整代码 4.3种排序-综合代码 4. ...

最新文章

  1. win10未开启没有运行无线服务器,win10系统提示共享无线自动配置服务没有自动运行的解决办法...
  2. python怎么做折线图_python怎么画折线图
  3. 什么是分布式系统!以及分布式系统架构的优缺点!
  4. shell中join链接多个域_shell 如何实现两个表的join操作
  5. 创业路上的这点事之 从无到有,从有到......
  6. MySQL命令行下执行.sql脚本详解
  7. 2022.3.14矮牵牛
  8. 数据结构与算法学习笔记之 从0编号的数组
  9. HTML+CSS+JS实现 ❤️感谢关注3D文字动画特效❤️
  10. 控制台总是输出:xcode error: failed to attach to process ID 0
  11. 数据结构与算法之顺序队列
  12. mysql 5.6 之 GTID 复制介绍
  13. (转)如何入门 Python 爬虫
  14. sap新手学习第一天
  15. 摄影测量空间后方交会python实现
  16. 阿里云腾讯云领衔,中国成为全球第二大云服务市场
  17. 中标麒麟v7.0 yum源报错修改方法
  18. 教你将手机里的图片转成PDF的2种方法
  19. 美国ipv6云服务器配置,Vultr服务器添加ipv6地址的方法
  20. Microsoft 解决方案框架版本 3.0 概述

热门文章

  1. android 多屏互动 开发,基于Android的DLNA多屏互动系统的设计与开发
  2. 【显著性物体检测】【ECCV2018】Reverse Attention for Salient Object Detection【论文笔记】
  3. 知乎号如何运营?知乎号如何涨粉?知乎的流量价值是什么?
  4. 基于http协议的Melux掌静脉模组
  5. (离散化)洛谷P1496火烧赤壁
  6. 出口预算表自动计算_案例 | 脱硫吸收塔工艺仿真计算系统
  7. ART算法中松弛因子对重建图像质量的影响
  8. mysql查询结果用分隔符_MySQL查询返回分隔符后的子字符串?
  9. Java8-Stream流Intermediate中间操作详解
  10. 豆瓣好书整理(9.5分以上)