// todo 歸併排序
public
class
mergesort
;// 測試時間複雜度 o(n log n)
int[
] arr =
newint
[80000];
int[
] temp =
newint
[arr.length]
;for
(int i =
0; i < arr.length; i++
)long start_time = system.
currenttimemillis()
;mergesort
(arr,temp,
0,arr.length-1)
;long stop_time = system.
currenttimemillis()
; system.out.
printf
("耗費 %d ms"
,stop_time - start_time)
;// system.out.println(arrays.tostring(arr));
}// 分 + 合 方法
public
static
void
mergesort
(int
arr ,
int[
] temp,
int left,
int right)
}/**
* 合併方法
** @param arr 排序的原始陣列
* @param temp 合併儲存中間結果的陣列
* @param left 最左邊的索引
* @param center 中間的索引
* @param right 最右邊的索引
*/private
static
void
merge
(int
arr,
int[
] temp,
int left,
int center,
int right)
else
index++;}
//(2) 把有剩餘的一邊資料依次全部填充到temp
while
(leftindex <= center)
while
(c <= right)
//(3) 把臨時陣列的拷貝到arr中
// 注意 ,並不是 每次都拷貝所有
index =0;
int templeft = left;
while
(templeft <= right)
}}
八大排序之歸併排序
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。我們可以這樣簡單的理解 將乙個陣列分為兩個陣列arr1 arr2,假如這兩個陣列有序,再將這兩個陣列歸併為乙個陣列,並確保歸併後的陣列也有序。關...
八大排序 歸併排序
歸併排序 1.申請空間,使其大小為兩個已經排序的序列之和,用來存放合併後的序列。2.設定兩個指標指向兩序列的開始。3.比較兩個指標所指的元素,選擇小的放的合併空間,移動指標。4.重複3直到某個指標到達序列尾。5.將剩餘的元素拷到合併空間。實現 void merge sort int arr,int ...
八大排序 歸併排序
歸併排序 merge sort 也是一種常用的排序方法,歸併 的含義是將兩個或兩個以上的有序子串行合併成乙個新的有序子串行。如圖10 11為兩組有序子串行的歸併,有序子串行和,通過歸併把它們合併成乙個有序子串行。package ch02 import util.arrayutil public cl...