快速排序(1)
快速排序是一種不穩定的原地交換排序(據說可以改進),其平均時間複雜度是 o(nlogn)。最壞情況下是o(n^2)。
當陣列已是有序或接近有序時,是最壞的情況。在示例演算法中,總是選取當前塊的第乙個元素作為key,當陣列已經有序時,一趟排序總是把陣列分成乙個元素和其他元素兩部分(沒有發揮分治的效果)。這時對n個元素的陣列的排序要操作的次數是 n!。
所以要避免最壞的情況,key的選擇至關重要。我們可以通過隨機選擇key解決這個問題。
示例**如下:
public
class
quicksort3
/** for迴圈完成一趟排序,
* key、i、j指向陣列下標
* key選取第乙個元素,
* i指向key,i總是指向<=key的元素下標。並且i左邊的元素也<=key
* j從left+1向right遍歷元素
*/int i = left,key = left;
for(int j = left+1; j <= right; j++)
}int k = arr[key];
arr[key] = arr[i];
arr[i] = k;
//遞迴分治
sort(arr,key,i-1);
sort(arr,i+1,right);
}}
排序演算法 2 快速排序 Quick Sort
相比於氣泡排序演算法,快速排序要快的多,一般情況下氣泡排序的時間複雜度是o n 而快速排序平均時間複雜度為o nlogn 可以說是在所有交換排序中時間複雜度最低的乙個 但是在個別情況下也會達到和氣泡排序同等的時間複雜度,比如待排序的元素中用於排序的關鍵字全部相等,或者已經按照完全有序排列,這時候快速...
快速排序 QuickSort
快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...
快速排序 quicksort
快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...