Golang 歸併排序 MergeSort

2022-09-10 20:00:20 字數 917 閱讀 1435

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。

演算法描述

def mergesort(alist):

"""歸併排序(穩定|nlgn)"""

n = len(alist)

if n <= 1:

return alist

mid = n//2

#left 採用歸併排序後形成新的有序列表

left_li = mergesort(alist[:mid])

#right 採用歸併排序後形成新的有序列表

right_li = mergesort(alist[mid:])

#merge(left, right) 將兩個有序的子串行合併為乙個新的整體

left_pointer, right_pointer = 0, 0

result =

while left_pointer < len(left_li) and right_pointer

if left_li[left_pointer] < right_li[right_pointer]:

left_pointer += 1

else:

right_pointer += 1

result += left_li[left_pointer:]

result += right_li[right_pointer:]

return result

歸併排序Merge

歸併排序 歸併排序是一種基於分治法的一種排序方法。它將要排序的序列分成兩個長度相等的子串行,為每乙個子串行進行排序,然後再將子串行合併成乙個有序的序列。歸併排序 時間複雜度 o n logn 空間複雜度 o n 穩定性 穩定排序 第乙個區間 beg,mid 第二個區間 mid,end void me...

歸併排序 完成merge方法

在工程問題中,當對大量資料進行排序的時候,資料往往是放在陣列中的。這時進行排序需要一些騰挪的技巧。一般是使用乙個臨時的陣列空間儲存中間結果,排好序以後,再拷貝回原來的陣列。package cn.itcast.sort public class mergesort data中的資料,low,mid m...

golang 並行快速排序,歸併排序模板

快速排序 當遞迴終止時,結束乙個waitgroup,遞迴開始時,加入乙個waitgroup直到所有排序操作結束,waitgroup空 快排流程 import fmt sync var wg sync.waitgroup func quicksort a int,l,h int i,j,k l 1,h...