挖坑法思路:
取乙個元素p(第乙個元素),使元素p歸位;
列表被p分成兩部分,左邊的數一定不大於p,右邊的數一定不小於p;
遞迴完成排序。
python**示例:
lst = [5, 7, 4, 3, 1, 2, 9, 8]
def quick_sort(d, l, r):
if l < r:
m = partition(d, l, r)
quick_sort(d, l, m - 1)
quick_sort(d, m + 1, r)
def partition(d, l, r):
# 挖坑法,函式執行結束後,左邊的數一定不大於p,右邊的數一定不小於p
p = d[l]
while l < r:
while l < r and d[r] >= p:
r -= 1
d[l] = d[r]
while l < r and d[l] <= p:
l += 1
d[r] = d[l]
d[l] = p
return l
quick_sort(lst, 0, len(lst) - 1)
《演算法導論》中的快速排序:
class quicksort(object):
__instance = none
def __new__(cls, *args, **kwargs):
"""單例模式"""
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def __init__(self, data):
self.__quick_sort(data, 0, len(data) - 1)
def __quick_sort(self, d, l, r):
if l < r:
q = self.__partition(d, l, r)
self.__quick_sort(d, l, q - 1)
self.__quick_sort(d, q + 1, r)
def __partition(self, d, l, r):
x = d[r] # last value
i = l - 1 # last index
for j in range(l, r):
if d[j] <= x:
i += 1
d[i], d[j] = d[j], d[i]
d[i + 1], d[r] = d[r], d[i + 1]
return i + 1
quicksort(lst)
原文:
python實現快排演算法 python快排演算法詳解
快排是python經典演算法之一。1 下面講解的是什麼是快排和快排的圖示。2 快排是一種解決排序問題的運算方法。3 快排的原理 在陣列中任意選擇乙個數字作為基準,用陣列的資料和基準資料進行比較,比基準數字打的數字的基準數字的右邊,比基準數字小的數字在基準數字的左邊,第一次排序之後分為比基準資料大或比...
python實現快排
學習python,隨便寫了下快排,如下 coding utf 8 快速排序演算法實現 import sys sys.setrecursionlimit 1000000 設定最大遞迴深度,這裡設定為一百萬 def kuaipai ii,jj,data list global s s 1 記錄遞迴的深度...
快排 Python實現
同氣泡排序 上篇博文 一樣,快速排序也屬於交換排序,通過元素之間的比較與交換位置來達到排序的目的。不同的是,氣泡排序在每一輪中只是把1個元素冒泡到陣列的一端,而快速排序是 每一輪挑選乙個基準元素,讓比基準元素大的元素移動到陣列的一邊,比基準元素小的移動到陣列的另外一端,從而把陣列拆解成兩部分。舉例說...