Java三路快速排序
三路快速排序算法基本原理
-不需要多次操作重复元素
-适用于重复元素较多的情况
-将序列分为三个部分
若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三路快速排序相关推荐
- java实现快速排序算法
排序算法传送: 排序算法--java实现冒泡排序 排序算法--java实现选择排序 排序算法--java实现直接插入排序 排序算法--java实现二分法排序 排序算法--java实现希尔排序 排序算法 ...
- 史上最清晰的三路快速排序
更多精彩文章,请关注公众号[程序员小熊]. 排序算法不论是在刷题还是面试都经常遇到,掌握它能提升自己的算法功力从而增加自己面试通过的几率. 本文主要介绍一下三路快排,并以微软的一道面试题 leetco ...
- JAVA实现-快速排序
JAVA实现-快速排序 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 ...
- 使用 Java 实现快速排序(详解)
一.概述 最近在看一些面试题,发现很多面试过程中都会要求手写快速排序,查阅一些博客发现别人写的并不是特别清楚而且也很难记住,所以为了更好的掌握这个算法,所以在这篇文章中,将自己的学习过程记录下来,你将 ...
- 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)
分治法在排序算法中的应用--快速排序 时间复杂度:平均O(nlogn),最坏O(n^2) 如果说归并排序是按照元素在数组中的位置划分的话,那么快速排序就是按照元素的值进行划分.划分方法由两种,本节将主 ...
- java nodelist 快速排序,【Leetcode】Sort List in java,你绝对想不到我是怎么做的^^我写完过了我自己都觉得好jian~...
Sort a linked list inO(nlogn) time using constant space complexity. 大家看完题目估计跟我一样啦...都在想哪些是nlogn啊~快速排 ...
- java里面快速排序_Java:快速排序
快速排序相当于冒泡排序的进化版本,优点是速度比冒泡排序更快,缺点是写起来逻辑比冒泡排序啰嗦一点,没那么直观. 快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的.每次排序的时候 设置一个基准 ...
- Java实现快速排序 Quick Sort
本文带来八大排序算法之快速排序算法. 快速排序(QuickSort)是对冒泡排序的一种改进.基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小, ...
- Java【快速排序、插入排序、简单选择排序...】【八大排序-综合实验】
目 录 1.快速排序 1.1.概念+举例 1.2.完整代码 2.插入排序 2.1.概念+举例 2.2.完整代码 3.简单选择排序 3.1.概念+举例 3.2.完整代码 4.3种排序-综合代码 4. ...
最新文章
- win10未开启没有运行无线服务器,win10系统提示共享无线自动配置服务没有自动运行的解决办法...
- python怎么做折线图_python怎么画折线图
- 什么是分布式系统!以及分布式系统架构的优缺点!
- shell中join链接多个域_shell 如何实现两个表的join操作
- 创业路上的这点事之 从无到有,从有到......
- MySQL命令行下执行.sql脚本详解
- 2022.3.14矮牵牛
- 数据结构与算法学习笔记之 从0编号的数组
- HTML+CSS+JS实现 ❤️感谢关注3D文字动画特效❤️
- 控制台总是输出:xcode error: failed to attach to process ID 0
- 数据结构与算法之顺序队列
- mysql 5.6 之 GTID 复制介绍
- (转)如何入门 Python 爬虫
- sap新手学习第一天
- 摄影测量空间后方交会python实现
- 阿里云腾讯云领衔,中国成为全球第二大云服务市场
- 中标麒麟v7.0 yum源报错修改方法
- 教你将手机里的图片转成PDF的2种方法
- 美国ipv6云服务器配置,Vultr服务器添加ipv6地址的方法
- Microsoft 解决方案框架版本 3.0 概述
热门文章
- android 多屏互动 开发,基于Android的DLNA多屏互动系统的设计与开发
- 【显著性物体检测】【ECCV2018】Reverse Attention for Salient Object Detection【论文笔记】
- 知乎号如何运营?知乎号如何涨粉?知乎的流量价值是什么?
- 基于http协议的Melux掌静脉模组
- (离散化)洛谷P1496火烧赤壁
- 出口预算表自动计算_案例 | 脱硫吸收塔工艺仿真计算系统
- ART算法中松弛因子对重建图像质量的影响
- mysql查询结果用分隔符_MySQL查询返回分隔符后的子字符串?
- Java8-Stream流Intermediate中间操作详解
- 豆瓣好书整理(9.5分以上)