Python3實現快速排序
此公眾號會發表計算機考研(初複試資訊)、夏令營等資料,方便考研人對資訊的獲取,節約自身查詢資料的時間,回覆408,可獲得資料結構、作業系統、計算機網路、計算機組成原理全科資料
演算法描述
快速排序(quick-sort)與歸併排序(merge-sort)一樣,使用了分治思想。下面是對一個一般的子陣列A[p~r]進行快速排序的分治步驟:
① 分解:陣列A[p~r]被劃分為兩個子陣列A[p~q]和A[q+1~r],使得 A[q] 大於等於 A[p~q] 中的每個元素,且小於等於 A[q+1~r] 中的每個元素。(需要注意的是, A[p~q] 和 A[q+1~r] 可能為空)
② 解決:對子陣列 A[p~q] 和 A[q+1~r] 遞迴呼叫本程式。
③ 合併:因為子陣列都是原址排序的,所以不需要合併操作,此時的A陣列已經是排好序的。
ps:所謂原址排序是指:在對組進行排序的過程中,只有常數個元素被儲存到陣列外面。
快速排序的核心思想其實很簡單,即:在陣列中,如果某元素均比自己前面的元素大(或等於),而比自己後面的元素小(或等於),則該元素處於“正確位置”。
下面給出虛擬碼:
可以看出,演算法的關鍵是partiton方法的實現。下面給出它的演算法實現:
快排思想:(1)隨便取一個數為基準,一般選擇最後一個數或第一個數
(2)然後從頭遍歷,將比基準數小的放在左邊,大的放在右邊,放的時候用交換規則換;
(3)在左右兩邊重複此步驟,直至不能分解為止。
python 3實現
def partition(arr, start, end):
# 以最後一個作為基準
x = arr[end]
i = start - 1 # i用來記錄位置
for j in range(start, end):
# 當arr[j]>x時,i會停留,也就是說i+1上的數大於x
if arr[j] <= x:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[end] = arr[end], arr[i + 1]
return i + 1 # 返回劃分陣列的位置
def quickSort(arr, start, end):
# 直到不能分解為止
if start < end:
position = partition(arr, start, end)
quickSort(arr, start, position - 1) # 對左邊(小於arr[position])的排序
quickSort(arr, position + 1, end) # 對右邊(大於arr[position])的排序
測試
arr = [9, 2, 4, 0, 4, 1, 3, 5]
quickSort(arr, 0, len(arr) - 1)
print(arr)
測試結果
相關文章
- 快速理解7種排序演算法 | python3實現(排序演算法Python
- java實現快速排序Java排序
- Swift實現快速排序Swift排序
- GO 實現快速排序Go排序
- 快速排序(java實現)排序Java
- 快速排序 java實現排序Java
- php實現 歸併排序,快速排序PHP排序
- 快速排序三種實現排序
- Python實現的快速排序Python排序
- Go實現氣泡排序和快速排序Go排序
- 排序演算法之快速排序的實現排序演算法
- JavaScript實現標準快速排序JavaScript排序
- 快速排序的四種python實現排序Python
- Sort排序專題(5)快速排序(QuickSort)(C++實現)排序UIC++
- 排序演算法-Java實現快速排序演算法排序演算法Java
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 隨機快速排序Java程式碼實現隨機排序Java
- 快速排序演算法C++實現排序演算法C++
- 歸併排序與快速排序的一個實現與理解排序
- C++快速排序與歸併排序的實現(LeetCode 912)C++排序LeetCode
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 直播系統原始碼,實現快速排序和歸併排序原始碼排序
- 快速排序的三種實現方法 (C++)排序C++
- python3實現幾種常見的排序演算法Python排序演算法
- 二十、快速排序演算法——JAVA實現(遞迴)排序演算法Java遞迴
- Array.sort 演算法原理(插入排序\快速排序in-place實現)演算法排序
- python3如何排序Python排序
- 服務計算 TDD實踐——實現快速排序演算法排序演算法
- 三種語言實現快速排序(C++/Python/Java)排序C++PythonJava
- c#實現最簡快速排序,你絕對可以看懂C#排序
- 排序之快速排序排序
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- 排序:氣泡排序&快速排序排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 快速排序排序
- 8行程式碼實現快速排序,簡單易懂圖解!行程排序圖解
- 快速排序&&歸併排序排序
- 快速排序快速入門排序