學懂基礎排序演算法 快速排序

2021-10-06 13:40:56 字數 1895 閱讀 2458

快速排序簡介:快速排序是另一種基於分治技術的重要排序演算法,不像合併排序是按照元素在陣列中的位置對他們進行劃分,快速排序通過元素的值對它們進行劃分,劃分是對陣列中元素的重新排列,使得某一元素左邊的元素都小於等於該元素,而右邊的元素都大於等於該元素。

顯然,建立劃分後,a【s】就已經位於在它有序陣列中的最終位置,接下來,對兩邊的陣列分別進行排序,同樣的方法。

下面是快速排序演算法的偽**

}在劃分階段的時候,我們只用最簡單的策略—選擇子陣列的第乙個元素,即p=a【l】;

l兩次掃瞄都停止後,取決於掃瞄的指標是否相交,會發生三種情況,如果i如果掃瞄的指標相交,也就是說i>j,把中軸和a【j】交換以後,可以得到陣列的乙個劃分

最後如果掃瞄指標停下來指向的是同乙個元素,i==j,被指向的元素的值一定是等於p,因為也建立了乙個陣列的劃分,**點的位置s=i=j;

下面是劃分實現的偽**

c語言實現

int

partition

(int a,

int l,

int r)

while

(a[i]

while

(a[j]

>p)

;swap

(a,i,j);}

while

(i;swap

(a,i,j)

;swap

(a,l,j)

;return j;

}

在這樣的演算法下,下標i可能會越過子陣列的邊界,可以每次對下標加一的時候就檢查下標越界的可能性,還有另外一種方法,為陣列a【0,n-1】新增乙個限位器,防止i越過n這個位置。

新增的**如下

完整c語言實現

#include

void

swap

(int

* a,

int i,

int j)

intpartition

(int a,

int l,

int r)

while

(a[i]

while

(a[j]

>p)

;swap

(a,i,j);}

while

(i;swap

(a,i,j)

;swap

(a,l,j)

;return j;

}void

quicksort

(int a,

int l,

int r)

}int

main()

;quicksort

(a,0,3

);for(i=

0;i<

4;i++

)return0;

}

基礎排序演算法 快速排序

快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。首先,快速排序需要選擇乙個x,這個數很多人稱為基準。剛開始的時候選擇 a 0 當x,讓i l,j r 剛開始的時候l和r分別為最左邊和最右邊。1 讓j減小,直到遇到 i 或者找到乙個小於...

演算法基礎 快速排序

要求 10分鐘內寫出快排!之前筆試用到排序演算法,總是想用快排但是又不能在規定時間寫出來,歸根到底還是快排的邏輯步驟沒有搞清,所以才導致每次失敗!徹底搞清快排動作邏輯,這樣即使長時間不用也能臨時寫出來!思路 1.就像選擇排序每排一次序排好最小 大值一樣,快速排序每排一次序 會 將中軸值 預設取陣列第...

快速排序演算法 基礎

快速排序的演算法的核心思想是設定乙個值,把比這個值大的往右 扔 比這個值小的往左 扔 陣列快速排序的過程 設定兩個變數i j,排序開始時 i 0,j n 1 n為排序總數 以陣列中的第乙個元素作為比較的值,賦給變數key,即key a 0 首先從j往前搜尋,即從後往前 j 找到第乙個小於key的值a...