十大經典排序演算法 快速排序

2021-09-25 20:41:50 字數 1772 閱讀 5776

一、演算法複雜度

二、演算法流程

1、尋找乙個基準值pivot,將小於基準的放到基準的左邊,大於基準的放在右邊,這個操作叫做partition;

2、遞迴的將基準左邊和右邊的子串行重複上面的步驟;

三、**實現

import copy

def swap(arr, i, j):

tmp = arr[i]

arr[i] = arr[j]

arr[j] = tmp

def partition(arr, left_idx, right_idx):

#小於基準值的放在左邊,大於基準值的放在右邊,返回基準的當前索引;

pivot = left_idx

index = pivot + 1

for i in range(index, right_idx + 1):

if arr[i] < arr[pivot]:

swap(arr, i, index)

index += 1

swap(arr, pivot, index - 1)

return index - 1

def quick_sort_recur(arr, left, right):

#遞迴排列子串行;

if left < right:

pivot_idx = partition(arr, left, right)

quick_sort_recur(arr, left, pivot_idx - 1)

quick_sort_recur(arr, pivot_idx + 1, right)

return arr

def quick_sort(s):

arr = copy.deepcopy(s)

return quick_sort_recur(arr, 0, len(arr) - 1)

#測試結果

test = [3, 5, 4, 7, 2]

print(quick_sort(test)) #[2, 3, 4, 5, 7]

def partition(nums, start, end):

pivot = start

index = pivot + 1

for i in range(index, end + 1):

if nums[i] < nums[pivot]:

nums[index], nums[i] = nums[i], nums[index]

index += 1

nums[pivot], nums[index-1] = nums[index-1], nums[pivot]

return index-1

def quick_sort_recur(nums, left, right):

if left < right:

index = partition(nums, left, right)

quick_sort_recur(nums, left, index-1)

quick_sort_recur(nums, index+1, right)

return nums

nums = [3, 5, 4, 8, -1]

print(quick_sort_recur(nums, 0, len(nums) - 1))

十大經典排序演算法

載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...

十大經典排序演算法

不穩定排序種類為4種 快速排序 核心思想是partition操作 二分法分而治之 平均時間複雜度nlogn 希爾排序 高階版的插入排序,先把間隔較遠的子串行排序,最後間隔為1時,等同於插入排序 插入排序在序列有序時,時間複雜度常數級,所以先讓子串行總體有序,能有效降低時間複雜度 平均時間複雜度n 1...

十大經典排序演算法

常見經典排序 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。時間複雜度 空間複雜度 穩...