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...