歸併排序 小和問題

2021-09-26 09:21:10 字數 1945 閱讀 7016

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