排序-快速排序-优化-使用三向切分(优化重复元素的情况
来源:互联网 发布:遥知不是雪是哪首诗 编辑:程序博客网 时间:2024/05/16 00:33
package xwq.sort;import xwq.util.In;import xwq.util.StdOut;/** * 使用三向切分优化快速排序 适用于待排序数组中存在许多重复元素的使用场景 1个方向用于记录比基准值小的元素 1个方向用于记录与基准值相同的元素 * 1个方向用于记录比基准值大的元素 与普通快速排序主要区别在partition的划分 * */public class QuickSort3Way { public static void sort(int[] a) { partition(a, 0, a.length - 1); } // 使用三向划分数组 private static void partition(int[] a, int low, int high) { if (low >= high) return; int pivot = a[low]; // l指向小于基准值的元素右边界,e指向等于基准值的元素右边界,h指向大于基准值的左边界 int l = low, e = low + 1, h = high; while (e <= h) { if (a[e] < pivot) //a[e]小于基准值,交换a[l],a[e];l,e右移 swap(a, l++, e++); else if (a[e] > pivot) //a[e]大于基准值,交换a[h],a[e],h左移 swap(a, e, h--); else //a[e]等于基准值,e右移 e++; } partition(a, low, l-1); partition(a, h+1, high); } private static void swap(int a[], int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } public static void print(int a[]) { for (int i = 0; i < a.length; i++) StdOut.print(a[i] + " "); StdOut.println(); } // 测试函数 public static void main(String[] args) { int[] a = In.readInts(args[0]); sort(a); print(a); }}
0 0
- 排序-快速排序-优化-使用三向切分(优化重复元素的情况
- 快速排序及优化算法(三向切分的快速排序)
- 三向切分的快速排序
- 三向切分的快速排序
- 三向切分的快速排序
- 三向切分快速排序
- 三向切分快速排序
- java快速排序和三向切分的快速排序
- 排序笔记_6(三向切分的快速排序)
- 《算法》希尔排序、归并排序、快速排序、三向切分的快速排序
- 快速排序之三向切分
- 快速排序-三向切分(java实现)
- 图示经典算法--三向切分的快速排序
- 快速排序及三向切分快速排序
- [算法之排序]三向切分的快速排序算法(java实现)
- 算法#11--用简单的思维理解归并排序和三向切分快速排序
- 三种快速排序以及快速排序的优化
- 三种快速排序以及快速排序的优化
- iOS汉字转拼音,根据首字母创建索引条,UISearchController
- Android中关于Volley的使用(二)加载Json数据
- LeetCode Substring with Concatenation of All Words
- 值得你关注的Android6.0上的重要变化(一)
- ss使用教程-Linux
- 排序-快速排序-优化-使用三向切分(优化重复元素的情况
- MFC学习(27)CString内存泄漏的雷区——GetBuffer与ReleaseBuffer
- iOS开发,第三方应用微信授权登录,获取微信unionid
- apache traffic server6.0 安装
- 黑马程序员-学习笔记1-java程序的特性
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- VI命令
- (SEL)如何在一个方法中包含一个方法名 @selector(goSchollNews)
- [inkscope]安装的ceph的监控平台inkscope 1.1