三路快排
来源:互联网 发布:幼儿园美工区域教案 编辑:程序博客网 时间:2024/05/17 09:14
1 算法原理
将数组划分为三部分,大于v,小于v和等于v,设置三个指针,优点就是无需对重复元素进行重复操作,性能有所优化
2 时间复杂度
O(logn*n)
3 实现
/** * 三路快排 * * @author xld * */public class QuickSortThreeWay { public static void sort(int[] arr) { int n = arr.length; sort(arr, 0, n - 1); } public static void sort(int[] arr, int l, int r) { if(r<l) return; // 标定点 int v = arr[l]; // arr[l+1...lt] < v int lt = l; // arr[gt...r] > v int gt = r+1; // arr[lt+1...i) == v int i = l + 1; while (i < gt) { if (arr[i] < v) { swap(arr, i, lt + 1); lt++; i++; } else if (arr[i] > v) { swap(arr, i, gt - 1); gt--; } else { i++; } } swap(arr, l, lt); sort(arr, l, (lt-1)); sort(arr, gt, r); } private static void swap(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } /** * 测试 * * @param args */ public static void main(String[] args) { int[] arr = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; QuickSortThreeWay.sort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); System.out.print(' '); } System.out.println(); }}
阅读全文
2 0
- 三路快排
- 三路快排 duplicate keys
- 快速排序、三路快排、双基准
- LeetCode 75. Sort Colors (三路快排)
- 普林斯顿公开课 算法3-3:三路快排
- 本周算法:快速排序—三路快排 vs 双基准
- 算法之道(二):快速排序—三路快排 vs 双基准
- 从一个实战项目来看一下React Native开发的几个关键技术点
- 计算机基本知识(二)
- 快速开发条形码
- 推荐 git 一款图形化界面管理客户端
- shell中颜色的设置
- 三路快排
- 剖析ActivityManagerService
- 基于OpenCV的图像模糊与否检测
- 解决Hibernate:could not initialize proxy
- redis配置文件的介绍
- 单点登录(二)----实战------简单搭建CAS---测试认证方式搭建CAS
- 【剑指offer系列之二叉树】判断是否为平衡二叉树
- JPA的一对多映射(单向)
- 注册Tomcat为系统服务