把陣列從中間劃分成兩個子陣列,一直遞迴的把子陣列劃分成更小的子陣列,直到子陣列裡面只有乙個元素。依次按照遞迴的返回順序,不斷地合併排好序的子陣列,直到最後把整個陣列的順序排好。
public
class
mergesort
;sort
(nums,
0, nums.length -1)
; system.out.
println
(arrays.
tostring
(nums));
}public
static
void
sort
(int
nums,
int lo,
int hi)
int mid = lo +
(hi - lo)/2
;// 將陣列分為兩個部分
sort
(nums, lo, mid)
;// 陣列的左半部分
sort
(nums, mid +
1, hi)
;// 陣列的右半部分
merge
(nums, lo, mid, hi);}
public
static
void
merge
(int
nums,
int lo,
int mid,
int hi)
else
if(j > hi)
else
if(copy[j]
< copy[i]
)else}}
}
時間複雜度:o(nlogn)
空間複雜度:o(n),由於合併n個元素需要分配乙個大小為n的額外陣列,合併完成之後,這個陣列的空間會被釋放。
基礎排序演算法 歸併排序
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併排序是一種...
演算法基礎 歸併排序
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...