006 快速排序

2022-03-23 22:52:41 字數 1507 閱讀 1310

快速排序

原理:隨機找乙個基準數 ,暫且為第乙個。把這個數拿出來。此時有個空位。然後從最右邊開始找比他小的數。找到之後,把小的數放到空位上。然後從左邊開始找比它大的數,放到空位上

li = [8, 3, 4, 7, 2, 5, 6, 9, 1]

li = [1, 3, 4, 7, 2, 5, 6, 9, ] 8

li = [1, 3, 4, 7, 2, 5, 6, ,9 ] 8..

.li = [1, 3, 4, 7, 2, 5, 6, 8,9 ] 8

幾次之後 保證左邊的數都比基準數小,右邊的數都比基準數大

遞迴呼叫就可完成排序

1 li = [8, 3, 4, 7, 2, 5, 6, 9, 1]23

defpartition(li, left, right):

4 tmp = li[left] #

臨時存放基準數56

while left 7while left < right and li[right] >= tmp: #

右邊找比tmp小的數

8 right -= 1 #

比基準數大 向左移動一位置

9 li[left] = li[right] #

找到之後 把數放到左邊的空位上

1011

while left < right and li[left] <= tmp: #

左邊找比tmp大的數

12 left += 1 #

比基準數大,向右移動一位置

13 li[right] = li[left] #

找到之後。把數放到右邊的空位上

1415 li[left] = tmp #

當left 和right重合時,表示左邊的數都比基準數小,右邊的數都比基準數大,所以把基準數放到重合的位置上

16return

left

1718

19def

quick_sort(li, left, right):

20if left 21 mid = partition(li, left, right) #

得到基準數最後的的索引

22 quick_sort(li, left, mid - 1)

23 quick_sort(li, mid + 1, right)

2425

26 quick_sort(li, 0, len(li) - 1)

27print(li)

006 排序演算法 希爾排序

一 概述 希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。排序方法 時間複雜度 平均 時間複雜度 最...

遞迴 快速排序 快速排序

問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...