快速排序演算法分析解析

2022-08-24 06:42:10 字數 956 閱讀 4238

快速排序演算法的時間複雜度和各次標準資料元素的值關係很大。如果每次選取的標準元素都能均分兩個子陣列的長度,這樣的快速排序過程是乙個完全二叉樹結構。(即每個結點都把當前陣列分成兩個大小相等的陣列結點,n個元素陣列的根結點的分解次數就構成一棵完全二叉樹)。這時分解次數等於完全二叉樹的深度log2n;每次快速排序過程無論把陣列怎樣劃分、全部的比較次數都接近於n-1次,所以最好情況下快速排序演算法的時間複雜度為o(nlog2n):快速排序演算法的最壞情況是資料元素已全部有序,此時資料元素陣列的根結點的分需次數構成一棵二叉退化樹(即單分支二叉樹),一棵二叉退化樹的深度是n,所以最壞情況下快速排序演算法的時間複雜度為o(n2)。般情況下 ,標準元素值的分布是隨機的,陣列的分郵大數構成模二又樹,這樣的二叉樹的深度接近於log2n, 所以快速排序演算法的平均(或稱期望)時間複雜度為o(nlog2n)

function findkey(&$arr, $low, $hight

)

$arr[$low] = $arr[$hight

];

while ($low

< $hight && $target > $arr[$low

])

$arr[$hight] = $arr[$low

]; }

$arr[$hight]=$target

;

return

$hight;}

function quicksort(&$arr,$low,$hight

)

if($poskey

<$hight)}

$arr = [12, 56, 98, 32, 16, 34, 2, 9, 1];

$len = count($arr

);quicksort(

$arr, 0, $len - 1);

var_dump($arr);die;

快速排序演算法解析

一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由前開始向後搜尋 i ...

排序演算法分析 快速排序

假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,選擇中間位置的元素作為基準值 pivot value 其索引為 0 n 1 2 從第0個元素開始從左往右找到比基準值大的元素,其索引為i從第n 1個元素開始從右往左找到比基準值小的元素,其索引為j交換這兩個元素 從索引i...

快速排序演算法分析

快速排序演算法 include include void quicksort int arr,int nleft,int nright i nleft j nright int nmid nleft nright 2 int nmidval arr nmid while i j from right...