排序演算法 六 快速排序(交換排序)

2021-09-02 15:45:33 字數 1055 閱讀 9154

直接排序屬於交換排序

基本思想:

1:選1個基準元素(通常是第乙個元素或最後乙個元素),將待排數列分成兩部分,一部分比基準元素小,一部分比基準元素大

2:再對這兩部分數列重複步驟1

時間複雜度:

最好情況:o(n*logn)

最壞情況,退化為氣泡排序 o(n*n)

穩定性:不穩定

python**實現:quick_sort.py

def swap(l, i, j):

tmp = l[i]

l[i] = l[j]

l[j] = tmp

def partition(l, low, high):

pivo = l[low] #基準元素選取

while(low != high): #從數列兩端交替掃瞄

while(low < high and l[high] >= pivo): #從high位置向前搜尋,將比基準元素小的交換到低端

high -= 1

swap(l, low, high)

while(low < high and l[low] <= pivo):#從low位置向後搜尋,將比基準元素大的交換到高階

low += 1

swap(l, low, high)

return low

def quick_sort(l, low, high):

if low < high:

pivokey = partition(l, low, high)

quick_sort(l, low, pivokey-1) #遞迴對低端數列排序

quick_sort(l, pivokey+1, high) #遞迴對高階數列排序

if __name__ == '__main__':

l = [57,12,63,29,37,18,34,46,92,87]

quick_sort(l, 0, 9)

print('result:' + str(l))

排序演算法 交換排序 快速排序演算法

快速排序演算法 列印資料 void print list int data list int left int right printf n 核心排序 找到基準位置 挖坑法 int core sort int data list int left int right if i j while i j...

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

和歸併排序一樣,快速排序也是一種分治的遞迴演算法。快速排序的思想是 選取乙個樞紐元,將比樞紐元小的元素放樞紐元前面,把比樞紐元小的元素放後面,然後將前面的集合,後面的集合,重複之前的步驟。樞紐元的選取是一門學問,我們要將樞紐元的盡量選取為集合中間值,使得樞紐元兩邊的元素量能更加均勻,避免大小不等的遞...

交換排序 快速排序

快速排序 quick sort 也是一種交換排序,它在排序中採取了分治策略。從待排序列中選取一元素作為軸值 也叫主元 將序列中的剩餘元素以該軸值為基準,分為左右兩部分。左部分元素不大於軸值,右部分元素不小於軸值。軸值最終位於兩部分的分割處。對左右兩部分重複進行這樣的分割,直至無可分割。從快速排序的演...