python3 快速排序
生活随笔
收集整理的這篇文章主要介紹了
python3 快速排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
思路
第一步:找到一個隨機的數(shù),一般都是第一個數(shù),也就是left,遞歸中也用left,放到緩存中,專業(yè)叫 基準(zhǔn)值,基準(zhǔn)值是要放在中間的。
第二步:最左邊空出一個位置就是索引left的位置,所以從右向左找比基準(zhǔn)值小的索引 R ,找到并將值放在left位置,這樣索引R 就會空出來。
第三步:從左向右找比基準(zhǔn)值大的索引 L 并將值放在right的位置上。
第四步:循環(huán)到left = right,就是基準(zhǔn)值的索引,將基準(zhǔn)值賦值進去,并返回 基準(zhǔn)值索引。
?
第五步:遞歸排序基準(zhǔn)值左邊的列表,
第六步:遞歸排序基準(zhǔn)值右邊的列表。
def quit_sort(data, left, right):if left < right:mid = partition(data, left, right)quit_sort(data, left, mid - 1) # 最左面到中間quit_sort(data, mid + 1, right) # 中間到最后def partition(data, left, right):tmp = data[left]while left < right:# 從右找到比中間小的值的索引while left < right and data[right] > tmp:right -= 1data[left] = data[right]# 從左找到比中間大的索引while left < right and data[left] < tmp:left += 1data[right] = data[left]data[left] = tmpreturn leftli = list(range(1000)) random.shuffle(li) print(li) quit_sort(li,0,len(li)-1) print(li)注:python中有最大的遞歸層數(shù),如果超過會報錯,我們需要設(shè)置一下
import sys sys.setrecursionlimit(10000)快排的時間復(fù)雜度
最好情況 O(nlongn)
一般情況?O(nlongn)
最差情況 O(n2)
?
轉(zhuǎn)載于:https://www.cnblogs.com/bingabcd/p/7425008.html
總結(jié)
以上是生活随笔為你收集整理的python3 快速排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git版本管理工具的使用
- 下一篇: Python这么热,要不要追赶Pytho