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