# 快速排序# 時間複雜度:o(nlogn) 當n等於16層時,他一共要執行四次func() 每乙個func就是o(n) 所以就是 n * logn
# 最差的時間複雜度也就是o(n^2) 當然這種情況出現的機率不大
# 找乙個基準數,暫且為左邊第乙個,用變數存起來,此時基準數的位置是空的
# 然後從右邊開始找比基準數小的數。找到之後把最小數放到基準數的位置
# 此時最小數之前的位置又是空的,就反過來,從左邊開始找,找比基準數大的數 放到空位置上面。
# 幾次之後 保證左邊的數都比基準數小,右邊的數都比基準數大
# 最後遞迴呼叫完成排序
118 if left < right: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):
19 mid = func(li, left, right)
20 quick_sort(li, left, mid - 1)
21 quick_sort(li, mid + 1, right)
222324 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 ...