13 資料結構與演算法 快速排序

2021-08-30 13:54:15 字數 845 閱讀 4796

#created by: chen da

"""快速排序的思想:

選擇基準值pivot將陣列分成兩個子陣列,小於基準值的元素和大於基準值的元素;這個過程稱為partition

對兩個子陣列進行快速排序;

合併結果。

"""#乙個簡單粗暴的遞迴快排

def quik_sort(array):

if len(array) < 2:

return array

else:

pivot_index = 0 #這裡簡單的將首個元素作為基準值

pivot = array[pivot_index]

less_part = [i for i in array[pivot_index+1:] if i <= pivot]

great_part = [i for i in array[pivot_index+1:] if i > pivot]

return quik_sort(less_part) + [pivot] + quik_sort(great_part)

def test_quik_sort():

import random

lyst = list(range(10))

random.shuffle(lyst)

assert quik_sort(lyst) == sorted(lyst)

if __name__ == "__main__":

test_quik_sort()

上面的快速排序的版本過於簡單粗暴,存在一些問題,如less_part和great_part需要額外的陣列佔據空間進行儲存,並且兩者進行了兩次遍歷。

資料結構與演算法 排序演算法 快速排序

源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...

資料結構與演算法 快速排序

基礎概念 快速排序,聽這個名字就能想到它排序速度比較快方法,是一種分治思想。所謂分治,就是指以乙個數為基準,將序列中的其他數往它兩邊 扔 以從小到大排序為例,比它小的都 扔 到它的左邊,比它大的都 扔 到它的右邊,然後左右兩邊再分別重複這個操作,不停地分,直至分到每乙個分割槽的基準數的左邊或者右邊都...

資料結構與演算法 快速排序

快速排序在實際應用中使用廣泛,效果也高。快排使用的是分治策略,一組序列基於某乙個基準值分成兩個大小的子串行,遞迴排序子串行,最終得到有序的序列。快排的平均時間複雜度為o nlogn 演算法的實現步驟 1.在序列中挑選乙個基準值,我們可以預設第乙個數為基準值 2.從兩邊的數值跟基準值作對比,數值小的放...