8 3 觀察歸併演算法的微觀 迭代 過程

2021-10-14 15:27:25 字數 2978 閱讀 1748

public

class

mergesort

public

static

comparable

>

void

sort

(e arr)

public

static

comparable

>

void

sort

(e arr,

int l,

int r,

int depth)

//獲取中間值

//有時候可能會出現 整形的溢位 所以我們改為減法

int mid = l +

(r - l)/2

;//分開進行排序

sort

(arr,l,mid,depth +1)

;//深度 +1

sort

(arr,mid+

1,r,depth +1)

;//列印這次merge要處理的陣列區間範圍

system.out.

print

(depthstring)

; system.out.

println

(string.

format

("merge arr[%d,%d] and arr[%d,%d]"

,l,mid,mid+

1,r));

//對排好序的陣列進行歸併

merge

(arr,l,mid,r)

;//列印merge 後的陣列

system.out.

print

(depthstring)

; system.out.

print

(string.

format

("after arr[%d,%d]"

,l,r));

for(e e:arr)

system.out.

println()

;}//實現歸併

public

static

comparable

>

void

merge

(e arr,

int l,

int mid,

int r)

else

if(j > r)

else

if(temp[i-l]

.compareto

(temp[j-l]

)<=0)

else}}

private

static string generatedepthstring

(int depth)

return res.

tostring()

;}public

static

void

main

(string[

] args)

;sort

(arr);}

}

mergesort arr[0,

7]---mergesort arr[0,

3]----

--mergesort arr[0,

1]----

----

-mergesort arr[0,

0]----

----

-mergesort arr[1,

1]----

--merge arr[0,

0] and arr[1,

1]----

--after arr[0,

1]17

4283

65----

--mergesort arr[2,

3]----

----

-mergesort arr[2,

2]----

----

-mergesort arr[3,

3]----

--merge arr[2,

2] and arr[3,

3]----

--after arr[2,

3]17

2483

65---merge arr[0,

1] and arr[2,

3]---after arr[0,

3]12

4783

65---mergesort arr[4,

7]----

--mergesort arr[4,

5]----

----

-mergesort arr[4,

4]----

----

-mergesort arr[5,

5]----

--merge arr[4,

4] and arr[5,

5]----

--after arr[4,

5]12

4738

65----

--mergesort arr[6,

7]----

----

-mergesort arr[6,

6]----

----

-mergesort arr[7,

7]----

--merge arr[6,

6] and arr[7,

7]----

--after arr[6,

7]12

4738

56---merge arr[4,

5] and arr[6,

7]---after arr[4,

7]12

4735

68 merge arr[0,

3] and arr[4,

7]after arr[0,

7]12

3456

78

Javascript合併演算法的實現(遞迴 迭代)

使用分治法將需要排序的內容一分為二,二分為四,四分為八 將內容分解到通過最後單獨比較大小的粒度,進行排序,然後將內容八並為四,四並為二,二並為一。1 遞迴實現 function merge left,right return result.concat left concat right funct...

歸併演算法的實現

public class test int count intarr.length for int i 0 i intarr.length 1 i 2 2個有序陣列,共合併1次 3個有序陣列,共合併2次 4個有序陣列,共合併3次 int mergecount count 2 count 2 第一次分...

歸併演算法的改進

遞迴對陣列b排序,將排序後的結果放入a中,下次遞迴排序時對陣列a排序,將結果放入b中,以此方式可以完成對陣列的排序.且沒有出現在子陣列合併後陣列之間的複製.include include include include include include using namespace std defi...