好程式設計師Python學習路線分享實現快速排序演算法
好程式設計師Python學習路線分享 實現快速排序演算法快速排序演算法是一種基於交換的高效的排序演算法,由C.R.A.Hoare 於 1962 年提出,是一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 (Divide and conquer algorithm) 。
分治法的基本思想
將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。
快速排序的基本思想
- 先找到一個基準點(一般指陣列的中部),然後陣列被該基準點分為兩部分,依次與該基準點資料比較,如果比它小,放左邊;反之,放右邊。
- 左右分別用一個空陣列去儲存比較後的資料。
- 最後遞迴執行上述操作,直到陣列長度 <= 1;
程式碼實現
```python
def quick_sort(lists, left, right):
''' 快速排序 '''
# 跳出遞迴判斷
if left >= right:
return lists
# 選擇參考點,該調整範圍的第 1 個值
key = lists[left]
low = left
high = right
# 迴圈判斷直到遍歷全部
while left < right:
# 從右邊開始查詢大於參考點的值
while left < right and lists[right] >= key:
right -= 1
lists[left] = lists[right] # 這個位置的值先挪到左邊
# 從左邊開始查詢小於參考點的值
while left < right and lists[left] <= key:
left += 1
lists[right] = lists[left] # 這個位置的值挪到右邊
# 寫回改成的值
lists[left] = key
# 遞迴,並返回結果
quick_sort(lists, low, left - 1) # 遞迴左邊部分
quick_sort(lists, left + 1, high) # 遞迴右邊部分
return lists
numbers = [4, 0, 7, 9, 2, 8, 1, 3, 6, 5]
quick_sort(numbers , 0 , len(numbers)-1)
assert numbers == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2656638/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java學習路線分享Redis快速入門程式設計師JavaRedis
- 好程式設計師Python學習路線分享用pprint代替print程式設計師Python
- 好程式設計師Python學習路線分享Beeprint怎麼用程式設計師Python
- 好程式設計師Java學習路線分享5分鐘瞭解計數排序程式設計師Java排序
- 好程式設計師Java學習路線分享SpringCloud程式設計師JavaSpringGCCloud
- 好程式設計師Java學習路線分享氣泡排序及最佳化程式設計師Java排序
- 好程式設計師Java學習路線分享5分鐘瞭解基數排序程式設計師Java排序
- 好程式設計師Java學習路線分享mybatis對映程式設計師JavaMyBatis
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師分享Python從入門到精通最佳學習路線程式設計師Python
- 好程式設計師雲端計算學習路線分享檢視程式process程式設計師
- 好程式設計師雲端計算學習路線分享:關於NFS程式設計師NFS
- 好程式設計師Java學習路線分享JVM相關概念程式設計師JavaJVM
- 好程式設計師Java學習路線分享MyBatis之基本使用程式設計師JavaMyBatis
- 好程式設計師Java學習路線分享maven是什麼程式設計師JavaMaven
- 好程式設計師Java學習路線分享原生Ajax的使用程式設計師Java
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師Python學習路線分享Linux和資料庫部分程式設計師PythonLinux資料庫
- 好程式設計師雲端計算學習路線分享軟體包管理程式設計師
- 好程式設計師Java學習路線分享Java框架怎麼搭建程式設計師Java框架
- 好程式設計師Java學習路線分享MyBatis之Spring整合程式設計師JavaMyBatisSpring
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師Java學習路線分享Dubbo架構介紹程式設計師Java架構
- 好程式設計師web前端學習路線分享函式基礎程式設計師Web前端函式
- 好程式設計師Java學習路線分享多執行緒概念程式設計師Java執行緒
- 好程式設計師Java學習路線分享MySQL目錄結構程式設計師JavaMySql
- 好程式設計師Java學習路線分享finalize()方法詳解程式設計師Java
- 好程式設計師Java學習路線分享SpringMVC之MVC概述程式設計師JavaSpringMVC
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師Java學習路線分享三大特性之多型程式設計師Java多型
- 好程式設計師web前端學習路線分享Jsonp詳解程式設計師Web前端JSON
- 好程式設計師web前端學習路線分享滾動穿透方法程式設計師Web前端穿透