python中快速排序演算法

2021-09-09 01:18:59 字數 2257 閱讀 4040

相比歸併排序來說快速排序在資料量小的情況下是不佔優勢的,因為快速排序的時間複雜度最好的情況下是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 選取乙...