交排之快速排序演算法

2021-10-04 09:35:12 字數 1290 閱讀 4686

j位置的值只要發生了交換,就要改變比較的方向去,即從i開始去比較。

i從左向右移動,即i=0,list[i]<=tmp,繼續向右移動i,此時,

只要i處的值比tmp小,i就一直向右移,最後i移動到j的位置,即i = j = 4。只要i與j相遇,即i==j,就將tmp插入這個相遇的位置。

一輪操作下來,list = [1, 3, 2, 4, 5]。分別對基準左右兩個分割槽實時上述步驟,直至分割槽沒有元素未知。

最壞的情況,每次劃分都將資料分成乙個分割槽。這樣遞迴樹的高度為n

nn,需要n−1

n-1n−

1次劃分。

平均情況下,接近最好。

# 一趟排序,目的是將左邊的乙個元素作為基準,將資料中小於基準全放基準的左邊,

# 大於的部分放基準的右邊,輸出基準最終位置

## s為要排序的起始位置,t為要排序的結束位置

defpartition

(list, s, t)

: i, j = s, t

tmp = list[i]

# 基準

while i

while j>i and list[j]

>=tmp:

# 從右向左掃瞄,直到右邊的數比基準值小為止

j -=

1## 向左移動

list[i]

= list[j]

## 將右邊小於基準值的值排到前面i的位置去

while i

<=tmp:

# 從左向右掃瞄,直到左邊的數比基準值大為止

i +=

1 list[j]

= list[i]

list[i]

= tmp

return i

defquicksort

(list, s, t)

:# 遞迴部分

if s>=t:

return list

else

: i = partition(list, s, t)

quicksort(list, s, i-1)

quicksort(list, i+

1, t)

return list

32排序演算法之快速排序

排序演算法之快速排序 基本原理 反覆進行有序劃分。有序劃分方法 在陣列a中任選乙個元素x作為劃分元素,通過比較將小於x的元素換到陣列的左端 左段 將大於或等於x的元素換到陣列右端 右段 x本身位於兩段之間。如果左 右段元素個數多於1,則遞迴的將左 右段各自劃分,直到每段元素個數都不超過1,從而達到排...

演算法之常見排序演算法 氣泡排序 歸併排序 快速排序

引言 對於程式設計中琳琅滿目的演算法,本人向來是不善此道也不精於此的,而說起排序演算法,也只是會氣泡排序。還記得當初剛做開發工作面試第一家公司時,面試官便讓手寫氣泡排序 入職之後才知道,這面試官就是乙個氣泡排序 病態 愛好者,逢面試必考氣泡排序 後來看吳軍的一些文章,提到提高效率的關鍵就是少做事情不...

2 排序演算法 快速排序

問題描述 利用快速排序演算法對下列例項排序,在演算法執行過程中,寫出陣列 a第一次排序後被分割的過程。a 65,70,75,80,85,55,50,2 解題思想 在快速排序中,記錄的比較和交換是從兩端向中間進行的,關鍵字較大的記錄一次就能交換到後面的單元,總的比較和移動次數較少。對於輸入的陣列a p...