005 快速排序

2022-03-23 23:23:28 字數 1452 閱讀 5789

# 快速排序

# 時間複雜度:o(nlogn) 當n等於16層時,他一共要執行四次func() 每乙個func就是o(n) 所以就是 n * logn

# 最差的時間複雜度也就是o(n^2) 當然這種情況出現的機率不大

# 找乙個基準數,暫且為左邊第乙個,用變數存起來,此時基準數的位置是空的

# 然後從右邊開始找比基準數小的數。找到之後把最小數放到基準數的位置

# 此時最小數之前的位置又是空的,就反過來,從左邊開始找,找比基準數大的數 放到空位置上面。

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

# 最後遞迴呼叫完成排序

1

deffunc(li, left, right):

2 tmp =li[left]

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

右邊找比tmp小的數

5 right -= 1 #

比tmp大,right向左移動一位

6 li[left] = li[right] #

找到之後 右邊的值寫到左邊空位上

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

左邊找比tmp大的數

8 left += 1 #

比tmp小,right向右移動一位

9 li[right] = li[left] #

找到之後 左邊的值寫到右邊空位上

10 li[left] = tmp #

兩個while一旦left與right碰頭,也就是找到時候沒有找到比自己大的數或者比自己小的數,跳出了迴圈,並且將tmp的值賦給left或right所在的索引

11return

left

1213

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

1516

17def

quick_sort(li, left, right):

18    if left < right:

19       mid = func(li, left, right)

20       quick_sort(li, left, mid - 1)

21       quick_sort(li, mid + 1, right)

22

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

25print(li)

練習題005 氣泡排序

c語言練習題目錄索引 題目 給定一組數字,使用氣泡排序將其按公升序序列排序。解題思路 氣泡排序利用兩個巢狀while迴圈完成,內層迴圈每迴圈一次就將找的的最大數已到最後乙個位置,此時這個位置就不用管了,再排序前面的數。y 交換兩數的位置 void show int arr,int len 列印陣列 ...

遞迴 快速排序 快速排序

問題描述 用遞迴來實現快速排序 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 ...