快速排序的改進 隨機快速排序

2021-07-29 11:35:43 字數 529 閱讀 8866

快速排序是一種高效的排序方法,但是如果我們的輸入陣列是排好序的乙個陣列,快速排序的執行時間就會變成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 ...