普林斯頓公開課 演算法3 3 三路快排

2021-06-22 09:04:37 字數 693 閱讀 2775

很多時候排序是為了對資料進行歸類,比如對城市進行排序,對員工的職業進行排序。這種排序的特點就是重複的值特別多。

如果使用普通的快排對這些資料進行排序,會造成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 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。極客學院 演算法描述 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在...