标签:style blog http color io 使用 ar java strong
很多时候排序是为了对数据进行归类,这种排序重复值特别多
若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题。
归并排序对重复数据排序的比较在1/2NlgN和NlgN之间
三路快排
目标:将数据分成三个区间(3-way partitioning)
性能
三路快排的复杂度比普通快排小,主要取决于数据中重复数据的数量。重复数据越多,三路快排的复杂度就越接近于N。
Java实现
private static void sort(Comparable[] a, int lo, int hi) { if (hi <= lo) return; int lt = lo, gt = hi; Comparable v = a[lo]; int i = 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++; } sort(a, lo, lt - 1); sort(a, gt + 1, hi); }
普林斯顿大学算法课 Algorithm Part I Week 3 重复元素排序 - 三路快排 Duplicate Keys
标签:style blog http color io 使用 ar java strong
原文地址:http://www.cnblogs.com/Jimtastic/p/4003982.html