快速排序原理:隨機找乙個基準數 ,暫且為第乙個。把這個數拿出來。此時有個空位。然後從最右邊開始找比他小的數。找到之後,把小的數放到空位上。然後從左邊開始找比它大的數,放到空位上
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]23defpartition(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 ...