基礎演算法 歸併排序

2021-08-21 13:37:44 字數 815 閱讀 2564

def

merge

(arr):

# 這個函式是先把陣列進行分割,一直分,最後分成乙個數來呼叫第二個函式mergesort進行比較

# 如果陣列只有乙個數,直接就返回

if len(arr) <= 1:

return arr

mid = len(arr) // 2

left_arr = merge(arr[:mid])

right_arr = merge(arr[mid:])

return merge_sort(left_arr, right_arr)

defmerge_sort

(left_arr, right_arr):

left = 0

right = 0

mergelist =

while left < len(left_arr) and right < len(right_arr):

if left_arr[left] < right_arr[right]:

left += 1

else:

right += 1

# 到這裡,上面的兩個序列的比較就比較完了,下面的操作是把剩下的沒有比較的,直接放入儲存的歸併列表中

mergelist += left_arr[left:]

mergelist += right_arr[right:]

return mergelist

arr = [8, 5, 3, 2, 8]

ans = merge(arr)

print(ans)

演算法基礎 歸併排序

1.演算法描述 把原始的陣列分成若干的子陣列,對每乙個子陣列進行排序 繼續把子陣列與子陣列合併,合併後仍然有序,直到全部合併完成,形成有序的陣列。2.演算法實現 2.1.合併子陣列 param unsorted the unsorted array param first the start ind...

演算法基礎 歸併排序

歸併排序即將目標陣列分成n個最小的組 相鄰的2個數字 並將這些最小子陣列排序,依次合併相鄰的子陣列,最後各自有序的子陣列將會合併成完全有序的陣列。這將需要用到遞迴思想。static class mergesort private static void merge int a,int start,i...

基礎排序演算法 歸併排序

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