public
class
mergesort
sortprocess
(arr,
0, arr.length -1)
;}//遞迴
public
static
void
sortprocess
(int
arr,
int l,
int r)
int mid = l +
((r - l)
>>1)
;sortprocess
(arr, l, mid)
;// t(n/2)
sortprocess
(arr, mid +
1, r)
;// t(n/2)
merge
(arr, l, mid, r)
;// o(n)
// t(n) = 2*t(n/2) +o(n)
}//使整體有序
public
static
void
merge
(int arr,
int l,
int mid,
int r)
// 兩個必有乙個越界
while
(p1 <= mid)
while
(p2 <= r)
for(
int x =
0; x < help.length; x++)}
public
static
void
main
(string[
] args)
;mergesort
(arr)
;for
(int n :arr)
}}
/**
* 小和問題
* * 在乙個陣列中,每乙個數左邊比當前數小的數累加起來, 叫做這個陣列的小和。求乙個陣列 的小和
* */
public
class
smallsum
return
mergesort
(arr,
0, arr.length -1)
;}public
static
intmergesort
(int
arr,
int l,
int r)
int mid = l +
((r - l)
>>1)
;//相當於 mid = l + (r-l)/2
//左邊排序的小和 + 右邊排序的小和 + 總體的小和
return
mergesort
(arr, l, mid)
+mergesort
(arr, mid +
1, r)
+merge
(arr, l, mid, r);}
public
static
intmerge
(int
arr,
int l,
int m,
int r)
while
(p1 <= m)
while
(p2 <= r)
//將排序好的陣列寫回原陣列
for(i =
0; i < help.length; i++
)return res;
}public
static
void
main
(string[
] args)
; system.out.
println
(smallsum
(arrays));
}}
歸併排序 小和問題
問題描述 在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。樣例 1,3,4,2,5 1左邊比1小的數,沒有 3左邊比3小的數,1 4左邊比4小的數,1 3 2左邊比2小的數,1 5左邊比5小的數,1 3 4 2 所以小和為1 1 3 1 1 3 4 2 16 ...
小和問題 歸併排序
在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。例子 輸入 1,3,4,2,5 輸出 16 1左邊比1小的數,沒有 3左邊比3小的數,1 4左邊比4小的數,1 3 2左邊比2小的數,1 5左邊比5小的數,1 3 4 2 所以小和為1 1 3 1 1 3 4 2 16實現的基本原...
小和問題(歸併排序)
在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。描述 1,3,2,51,5 1左邊比1小的數 0 3左邊比3小的數 1 2左邊比2小的數 1 51左邊比51小的數 2,3,1 5左邊比5小的數 2,3,1 所以小和為0 1 1 2 3 1 2 3 1 14 解...