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...