快速排序是一種高效的排序方法,但是如果我們的輸入陣列是排好序的乙個陣列,快速排序的執行時間就會變成o(n^2)。雖然這種情況很少會出現,但我們還是應該避免。
演算法導論書籍中的修改方法:在排序方法中隨機化選取主元。根據計算,改進後的方法時間複雜度的期望為o(nlgn)。
下面是改進後的**:
///
/// 快速排序
//////
//////
public
void
quicksort(int arr, int p , int q)
}public
intquatition(int arr, int p, int q)
}commonsortutil.exchange(arr, i, p);
return i;
}
其中commonsortutil.exchange(arr, i, j)方法為靜態方法,功能是交換arr陣列中的arr[i]和arr[j]的值。 快速排序改進
快速排序平均複雜度為o nlgn 最壞情況為o n 2 即陣列已經有序或大致有序的情況下,每次劃分只能減少乙個元素,快速排序將不幸退化為氣泡排序,所以快速排序時間複雜度下界為o nlogn 最壞情況下為o n 2 1.如果在排序時選取最後乙個元素為基準,則可以通過以下方法來避免劃分的不平衡。int ...
快速排序改進
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...
快速排序和隨機快速排序
嚴書上的快排是以最左邊元素為樞紐的,如下 include include using namespace std intpartition int a,int left,int right a left p return left void quicksort int a,int left,int ...