相比歸併排序來說快速排序在資料量小的情況下是不佔優勢的,因為快速排序的時間複雜度最好的情況下是n(log n),但是在處理大量資料的時候歸併排序就不如時間排序了,因為在空間複雜度上面歸併排序消耗資源更多.
所以我們可以做乙個判斷 如果列表長度小於某個數值的時候走if分支 而大於某個值的時候走else分支.
def quicksort(array, left=0, right=none):
#獲取陣列的長度
arraylen = len(array)
#如果陣列的長度小於等於1 則把結束當前遞迴 返回該陣列
if arraylen <= 1:
return array
#如果右邊是none 則說明是剛開始初始化 把陣列的總長度減一(總長度的下標) 賦值給右邊
if right == none:
right = arraylen - 1
#如果左邊小於右邊 說明還沒有達到分治的標準 繼續遞迴 否則跳出
if left < right:
#把陣列和當前層的左邊指標和右邊指標傳遞給函式進行處理
pivot = partition(array, left, right)
#例如 左表[2, 7, 6, 1] 錨點[3] 右表[5, 4, 9]
#把接收到的錨點作為分支的標準 先想作為(左表的)右邊界傳值
quicksort(array, left, pivot - 1)
#把接受到的錨點 作為右表的左邊界 處理
quicksort(array, pivot + 1, right)
#處理傳遞過來的陣列
def partition(array, left, right):
#獲取陣列中最右邊的值 作為錨點
pivotvalue = array[right]
#得到左邊的起始指標 和右邊的結束指標
i = left
j = right - 1
#如果起始指標大於結束指標 終止迴圈
while i < j:
#當右邊大於左邊指標的位置 並且右邊的值大於 錨點值的時候
while j > left and array[j] > pivotvalue:
#右邊的指標位置向左移動一位
j -= 1
# 當左邊小於右邊指標的位置 並且左邊的值小於等於 錨點值的時候
while i < right and array[i] <= pivotvalue:
#左邊的指標位置向右移動一位
i += 1
#如果左邊指標的位置小於右邊
if i < j:
#交換兩個數值的位置
array[i], array[j] = array[j], array[i]
#如果左邊指標對應的值大於右邊指標對應的值
if array[i] > array[right]:
#交換兩個數值的位置
array[i], array[right] = array[right], array[i]
return i
if __name__ == '__main__':
testlist = [2, 7, 6, 1, 5, 4, 9, 3]
quicksort(testlist)
print(testlist)
第二種快速排序寫法:
def partition(array, left, right):
i = left - 1
for j in range(left, right):
if array[j] <= array[right]:
i += 1
array[j], array[i] = array[i], array[j]
array[i+1], array[right] = array[right], array[i+1]
return i+1
def quicksort(array, left=0, right=none):
arraylen = len(array)
if arraylen <= 1:
return array
if left < right:
pivot = partition(array, left ,right)
quicksort(array, left, pivot - 1)
quicksort(array, pivot + 1, right)
Python 快速排序演算法
快速排序 空間複雜度為o log n 時間複雜度為 o n log n o n 2 演算法不穩定,不具有適應性 1 從序列中取出乙個數作為基準數 2 分割槽,比基準數大的放基準數右邊,小的放左邊 3 遞迴,重複第二步操作,直到基準數的左邊和右邊分別只剩乙個數 演算法的穩定性是指 對於待排序的序列中,...
Python快速排序演算法
檔名稱 a.py 作 者 孔雲 問題描述 演算法描述 先從數列中取出乙個數作為基準數。分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。再對左右區間重複第二步,直到各區間只有乙個數。問題分析 如下 def subsort list,low,high key list low...
Python 快速排序演算法
快速排序是一種常用的排序演算法,也是最快的排序演算法之一,執行時間為o n logn 演算法主要使用了遞迴和分治思想,簡單明瞭 def quicksort array 遞迴出口條件,當陣列為或只有乙個元素時不需要排序,直接返回 if len array 2 return array else 選取乙...