快速排序改進

2021-09-10 01:16:38 字數 858 閱讀 3538

public class quicksort 

exec(a,lo,j);

return j;

}//用分治法來進行快速排序

public static void sort(comparable a, int lo, int hi)

public static void show(comparable a)

system.out.println();}/*

改進的快速排序,在陣列長度較小的時候使用插入排序(可能是因為遞迴的原因)

待排序陣列的長度小於m時選擇插入排序,否則使用快速排序

*/public static void sort(comparable a, int lo, int hi, int m)

int j = partication(a,lo,hi);

sort(a,lo,j-1,m);

sort(a,j+1,hi,m);}/*

三向切分的快速排序,常規的快速排序沒有對重複值利用,三向切分的快速排序維護了3個指標lt,i,gt

假設lo和hi分別為陣列的起始和結束索引,a[lo..lt-1]中的元素都小於每次選定的元素v,a[gt+1...hi]中的元素都

大於v,a[lt...i-1]中的元素都等於v 然後再用分治法時 sort(a,lo,lt-1) sort(a,gt+1,hi)就避免對中間的重複值的

排序*/

public static void improvesort(comparable a,int lo,int hi)

improvesort(a,lo,lt-1);

improvesort(a,gt+1,hi);

}}

快速排序改進

快速排序平均複雜度為o nlgn 最壞情況為o n 2 即陣列已經有序或大致有序的情況下,每次劃分只能減少乙個元素,快速排序將不幸退化為氣泡排序,所以快速排序時間複雜度下界為o nlogn 最壞情況下為o n 2 1.如果在排序時選取最後乙個元素為基準,則可以通過以下方法來避免劃分的不平衡。int ...

快速排序的改進

改寫partition演算法。要求 一次partition之後,小於基準元素key的數在左邊,等於key的在中間,大於key的在右邊 思路一 參照演算法導論上的思想,做出改進 i指向小於基準元素的序列的末尾,j指向等於基準元素的序列的末尾,k指向當前遍歷到的元素。include include us...

快速排序的改進

快速排序最壞情況下,要比較o n 2 次,但平均效能為nlogn,基本達到了比較類排序所需時間的的下界。核心 為 void qsort int data,int begin,int end int pivot,i,j if begin end return i begin j end pivot d...