演算法研究之快速排序

2022-03-14 16:03:11 字數 1311 閱讀 8422

快速排序(quicksort)是對氣泡排序的一種改進。由c. a. r. hoare在2023年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

以上摘自百度百科.

最壞時間複雜度:

o(n二次方);

最好時間複雜度:

o(n);

快速排序的基本思想

1.分解:

在d[i...j...n]的資料中,找乙個基準點d[j],將資料劃分成左右兩份,

左等於d[i...j-1]

右等於d[j+1...n]

2.求解

遞迴呼叫劃分函式 對左右區間兩個資料劃分求解.

3.合併左右兩個排序好的資料

可見快速排序演算法時間複雜度等於劃分所花費的時間.

下面詳細說一說關鍵的第二部 求解

劃分步驟

資料 d[low...high];

① 設兩個變數 i,j,分別指向資料的low 和high.取其中任意乙個資料為基準pivot.

② 從右向左移動j,查詢比pivot小的資料,找到後將j所指向的資料賦給i,d[i]=d[j]

從左向右移動i,查詢比pivot大的資料,找到後將i所指向的資料賦給j.d[j]=d[i];

以此類推不斷交換方向,知道i=j的時候停止.這個時候i的位置就是基準pivot所在的位置.

下面通過資料走一遍這個流程

引文用文字不好描述..所以我在本子上用筆畫出來..

本人寫字不好看..勿噴..^.^

php寫的**

1 23 4

5 67 8

9 10

11 12

13 14

15 16

17 18

19 20

21 22

23 24

functionquick_sort(&$array,$x,$y)

//  if($i < $j)

$array[$i] =$array[$j];

//$i++查詢比基準$key大的值

while($i

$i++;

}// if($i < $j)

$array[$j] =$array[$i];

}$array[$i] =$key;

if($x

quick_sort($array,$x,$i-1);

if($y>$i+1)//右區間的資料

quick_sort($array,$i+1,$y); }

演算法 排序演算法之快速排序

很受打擊啊啊啊啊啊!這道排序題我很久之前就做過,而且當時沒用20分鐘就搞定了,可是,今天在公司做完手上的活之後打算刷題時,又心血來潮的想重做一遍,心想反正也花不了多少時間,結果。血崩了。要求 對於乙個int陣列,請編寫乙個快速排序演算法,對陣列元素排序。給定乙個int陣列a及陣列的大小n,請返回排序...

演算法 排序演算法之快速排序

快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...

排序演算法之快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...