經典排序演算法之歸併排序

2021-10-24 10:16:30 字數 1282 閱讀 3628

python實現:

'''

// 歸併排序演算法, a是陣列,n表示陣列大小

merge_sort(a, n)

// 遞迴呼叫函式

merge_sort_c(a, p, r)

'''# 歸併排序

defmerge_sort

(arr: list[

int]):

merger_sort_c(arr,0,

len(arr)-1

)def

merger_sort_c

(arr: list[

int]

, low:

int, high:

int)

:if low >= high:

return

mid =

(low + high)//2

# mid = low + (high - low) // 2

merger_sort_c(arr, low, mid)

merger_sort_c(arr, mid +

1, high)

merger(arr, low, mid, high)

defmerger

(arr, low, mid, high)

:# arr[low:mid], arr[mid+1, high] are sorted.

i, j = low, mid +

1 tmp =

while i <= mid and j <= high:

if arr[i]

<= arr[j]:)

i +=

1else:)

j +=

1 start = i if i <= mid else j

end = mid if i <= mid else high

tmp.extend(arr[start: end+1]

) arr[low: high+1]

= tmp

js實現

// 歸併排序 遞迴法,

// 注意這裡返回的才是排好序的陣列,原陣列沒有變動

function

_merge

(left, right)

else

}return result.

concat

(left, right);}

function

mergesort

(arr)

經典排序演算法之 歸併排序

1 思想 多次將兩個或兩個以上的有序表合併成乙個新的有序表。2 演算法時間複雜度 最好的情況下 一趟歸併需要n次,總共需要logn次,因此為o n logn 最壞的情況下,接近於平均情況下,為o n logn 說明 對長度為n的檔案,需進行logn 趟二路歸併,每趟歸併的時間為o n 故其時間複雜度...

經典排序演算法之歸併排序

原理,把原始陣列分成若干子陣列,對每乙個子陣列進行排序,繼續把子陣列與子陣列合併,合併後仍然有序,直到全部合併完,形成有序的陣列 舉例無序陣列 6 2 4 1 5 9 先看一下每個步驟下的狀態,完了再看合併細節 第一步 6 2 4 1 5 9 原始狀態 第二步 2 6 1 4 5 9 兩兩合併排序,...

經典排序之歸併排序

package 歸併排序 歸併排序的思想 將陣列從中間分開,然後利用遞迴的方法將左右子串行均拆開 再借助乙個陣列歸併左右序列,排序是在歸併時進行的,最後將資料複製到原始陣列中 public class mergesort public static void main string args ret...