快速排序是一種常用的排序算法,比選擇排序快的多。在之前的我隨筆中也寫過關于快速排序的算法,也可以看一下和現在的區別python實現快速排序 - Mr-Yang` - 博客園 (cnblogs.com)。
成都創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于做網站、成都網站制作、將樂網絡推廣、微信小程序開發、將樂網絡營銷、將樂企業策劃、將樂品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯為所有大學生創業者提供將樂建站搭建服務,24小時服務熱線:028-86922220,官方網址:m.kartarina.com
在看快速排序之前,要先了解一下遞歸,對于遞歸我之前的文章中也有提到python遞歸函數 - Mr-Yang` - 博客園 (cnblogs.com),在這里我補充一個關于遞歸的一個點:基線條件和遞歸條件
由于遞歸函數是自己調用自己,因此編寫這樣的函數時容易出錯,從而導致無限循環。示例如下:
def countdown(i):
print(i)
countdown(i-1)
如果運行上述代碼,就會發現一個問題:這個函數運行起來是不會停止,直到到達遞歸的最大深度。
正是因為這樣,編寫遞歸函數的時候,必須告訴它何時停止遞歸,所以每個遞歸函數都有兩個部分:基線條件(base case)和遞歸條件(recursive case)。遞歸條件指定的是函數調用自己,而基線條件則指的是不再調用自己,從而避免循環。例如給 countdown 添加基線條件。
def countdown(i):
print(i)
if i <= 1: #<----------基線條件
return
else: #<--------------遞歸條件
countdown(i-1)
這樣就按照預期那樣執行,不會無限循環下去如圖所示
因為對于排序來說,最簡單的就是一個空列表,或者只包含一個元素的列表,所以可以將基線條件設置為空或只包含一個元素,在這種情況下,只需要返回原列表。
def quicksort(alist):
if len(alist) < 2:
return alist
思路如下圖所示:
代碼如下:
def quicksort(alist):
if len(alist) < 2:
return alist # 基線條件為空或只包含一個元素的列表是有序的。
else:
pivot = alist[0] # 選擇基準值
less = [i for i in alist[1:] if i <= pivot] # 由小于基準值的元素組成
biggish = [i for i in alist[1:] if i > pivot] # 由大于基準值的元素組成
return quicksort(less) + [pivot] + quicksort(biggish)
作者:Mr-Yang
出處:https://www.cnblogs.com/XiaoYang-sir/p/.html
版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。
分享題目:8行代碼實現快速排序,簡單易懂圖解!
網站URL:http://m.kartarina.com/article36/dsoggpg.html
成都網站建設公司_創新互聯,為您提供品牌網站建設、全網營銷推廣、標簽優化、網站制作、面包屑導航、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯