很多時候排序是為了對資料進行歸類,比如對城市進行排序,對員工的職業進行排序。這種排序的特點就是重複的值特別多。
如果使用普通的快排對這些資料進行排序,會造成n^2複雜度,但是歸併排序和三路快排就沒有這樣的問題。
三路快排的基本思想就是,在對資料進行分割槽的時候分成左中右三個部分,中間都是相同的值,左側小於中間,右側大於中間。
三路快排的複雜度比普通快排小,主要取決於資料中重複資料的數量。重複資料越多,三路快排的複雜度就越接近於n。
public class quick3
public static void sort(comparable a, int lo, int hi)
// 將第乙個元素作為分割槽依據
comparable mid = a[lo];
// 對陣列進行掃瞄,分割槽
int lt = lo;
int gt = hi-1;
int i = lo;
while(true)
int cmp = a[i].compareto(mid); // 注意,這裡不要用sortutil.less
if(cmp < 0) else if(cmp > 0) else
}// 迭代排序
sort(a,lo,lt);
sort(a,gt+1,hi);
}}
普林斯頓公開課 演算法2 7 棧
棧和佇列都是乙個元素的集合,都能提供增加 刪除 迭代 判斷是否為空4個操作。在棧中,刪除操作刪除的是最後新增的元素。在佇列中,刪除操作刪除的是最早新增的元素。push pop isempty 將乙個鍊錶中第乙個節點刪掉,並將第二個節點設為首節點。將新的節點加入到鍊錶的頭部。在最壞情況下,每個操作的複...
普林斯頓大學演算法公開課筆記 插入排序
演算法 排序,algorithms part1插入排序 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。極客學院 演算法描述 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在...
普林斯頓大學演算法公開課筆記 插入排序
演算法 排序,algorithms part1插入排序 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。極客學院 演算法描述 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在...