5.快速排序

1.介紹:
快速排序(Quicksort)是對冒泡排序的一種改進(jìn)?;舅枷胧牵和ㄟ^一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,以此達(dá)到整個數(shù)據(jù)變成有序序列

2.快速排序示意圖:


快速排序

3.代碼實(shí)現(xiàn)

#快速排序
def sorted(sortlist):
    if len(sortlist) < 2:                       # 左右列表遞歸到只有一個數(shù)就不用排序了
        return sortlist         
    middle = sortlist[len(sortlist)//2]         # 這里是把中間值直接取到 return的時候就可以直接用
    leftlist = []
    rightlist = []
    for i in range(len(sortlist)):              # 大于middle放rightlist 小于middle放leftlist 
        if sortlist[i]>middle:
            rightlist.append(sortlist[i])
        elif middle>sortlist[i]:
            leftlist.append(sortlist[i])
 # 這里是遞歸的精華所在,首先只有左右列表需要遞歸所以是sorted(leftlist)、sorted(rightlist),其次我們每次遞歸的middle值都是已經(jīng)在本次遞歸的時候就已經(jīng)取到
 # 如果不這么做也不行,就無法取到middle值,因?yàn)閟ortlist一直在變化,
    return sorted(leftlist) + [middle] + sorted(rightlist) 
    
l= [2,10,8,22,12,5,1,28,21,11]
# l = [-9,78,0,23,-567,70]
res = sorted(l)
print(res)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容