python遞歸實(shí)現(xiàn)快速排序
快速排序(QuickSort)是對(duì)冒泡排序的一種改進(jìn):
基本思想:
通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序
過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
一趟快速排序的算法是:
1)設(shè)置兩個(gè)變量i、j,排序開(kāi)始的時(shí)候:i=0,j=N-1;
2)以第一個(gè)數(shù)組元素作為關(guān)鍵數(shù)據(jù),賦值給key,即key=A[0];
3)從j開(kāi)始向前搜索,即由后開(kāi)始向前搜索(j--),找到第一個(gè)小于key的值A(chǔ)[j],將A[j]和A[i]互換;
4)從i開(kāi)始向后搜索,即由前開(kāi)始向后搜索(i++),找到第一個(gè)大于key的A[i],將A[i]和A[j]互換;
5)重復(fù)第3、4步,直到i=j; (3,4步中,沒(méi)找到符合條件的值,即3中A[j]不小于key,4中A[i]不大于key的時(shí)候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,
進(jìn)行交換的時(shí)候i, j指針位置不變。另外,i==j這一過(guò)程一定正好是i+或j-完成的時(shí)候,此時(shí)令循環(huán)結(jié)束)。
利用python實(shí)現(xiàn)的快速排序代碼quick_sort.py如下:
def sub_sort(array,low,high): pivotkey=array[low] while low<high : while low<high and array[high]>=pivotkey: high -= 1 array[low]=array[high] while low<high and array[low]<=pivotkey: low += 1 array[high]=array[low] array[low]=pivotkey return low def quick_sort(array,low,high): if low < high : pivoloc=sub_sort(array,low,high) quick_sort(array,low,pivoloc-1) quick_sort(array,pivoloc+1,high) if __name__=="__main__": array=[49,38,65,97,76,13,27] print array quick_sort(array,0,len(array)-1) print array
對(duì)一個(gè)數(shù)組array=[49, 38, 65, 97, 76, 13, 27]進(jìn)行快速排序,得到的結(jié)果如下所示:
=============== RESTART: I:\python_DataStructure\quick_sort.py =============== [49, 38, 65, 97, 76, 13, 27] [13, 27, 38, 49, 65, 76, 97] >>>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python自動(dòng)化測(cè)試基礎(chǔ)必備知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是一篇關(guān)于Python自動(dòng)化測(cè)試基礎(chǔ)必備知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-02-02Python從入門到精通之條件語(yǔ)句和循環(huán)結(jié)構(gòu)詳解
Python中提供了強(qiáng)大而靈活的條件語(yǔ)句和循環(huán)結(jié)構(gòu),本文將從入門到精通地介紹它們的使用方法,并通過(guò)相關(guān)代碼進(jìn)行講解,希望對(duì)大家深入了解Python有一定的幫助2023-07-07Python基于textdistance實(shí)現(xiàn)計(jì)算文本相似度
textdistance是Python的第三方庫(kù),用于計(jì)算文本之間的相似度或距離,本文主要為大家詳細(xì)介紹了如何使用textdistance實(shí)現(xiàn)計(jì)算文本相似度,需要的可以了解下2024-03-03基于OpenCV的網(wǎng)絡(luò)實(shí)時(shí)視頻流傳輸?shù)膶?shí)現(xiàn)
這篇文章主要介紹了基于OpenCV的網(wǎng)絡(luò)實(shí)時(shí)視頻流傳輸?shù)膶?shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python實(shí)現(xiàn)判斷一個(gè)整數(shù)是否為回文數(shù)算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)判斷一個(gè)整數(shù)是否為回文數(shù)算法,結(jié)合實(shí)例形式分析了Python針對(duì)字符串的翻轉(zhuǎn)、判斷等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Python利用PyQt5制作一個(gè)獲取網(wǎng)絡(luò)實(shí)時(shí)NBA數(shù)據(jù)并播報(bào)的GUI程序
現(xiàn)在NBA聯(lián)賽也進(jìn)行到半決賽了,我們?cè)趺礃硬拍芤愿斓姆椒ǐ@取NBA的數(shù)據(jù)呢?這里我們就自己來(lái)做一個(gè)數(shù)據(jù)播報(bào)的程序,需要的朋友可以參考下2021-06-06Python-OpenCV實(shí)戰(zhàn):利用 KNN 算法識(shí)別手寫數(shù)字
K-最近鄰(KNN)是監(jiān)督學(xué)習(xí)中最簡(jiǎn)單的算法之一,KNN可用于分類和回歸問(wèn)題。本文將為大家介紹的是通過(guò)KNN算法實(shí)現(xiàn)識(shí)別手寫數(shù)字。文中的示例代碼介紹詳細(xì),需要的朋友可以參考一下2021-12-12