package smallsum;
import testarraymethonunit.testarraymethonunit;
/** * @author: 黃文偉
* @description: 求小和問題,給定陣列,陣列中每個元素與左邊元素相比,
* 若左邊元素小則計為小和,求出陣列的總小和
* * 例:,
* 3左邊沒數,小和0;1左邊為3,小和0,
* 2左邊為3、1,小和1,總的小和為0+0+1=1
*
* 解題:採用歸併排序思路解題,遞迴陣列居中劃分,
* 直至劃分到乙個數時對左右陣列進行外排
* 外排過程先判斷左邊陣列是否小於右邊,
* 若小就將左邊數與右邊陣列長度-下標+1向乘計算出小和,
* 再逐層返回遞迴,最終可得到總的小和。
* @date:created in 9:19 2019/8/9
*/public
class
smallsum
return
mergesort
(arrs,
0, arrs.length-1)
;}// 對陣列進行遞迴劃分
public
static
intmergesort
(int
arrs,
int l,
int r)
int mid = l +
((r - l)
>>1)
;return
mergesort
(arrs, l, mid)
+mergesort
(arrs, mid+
1, r)
+merge
(arrs, l, mid, r);}
// 對陣列進行左右外排,並返回小和
public
static
intmerge
(int
arrs,
int l,
int mid,
int r)
while
(p1 <= mid)
while
(p2 <= r)
// 將排好序的輔助陣列遍歷回原陣列
for(i =
0; i < help.length; i++
)return res;
}public
static
void
main
(string[
] args)}if
(success ==
true
)else
}// 使用暴力寫法,結果絕對正確,作用是給演算法校驗正確性
public
static
intrightmethon
(int
arrs)
for(
int i =
0; i < arrs.length; i++)}
}return sum;
}}
關於歸併排序
暑假集訓的時候就有接觸到歸併排序,但是當時並沒什麼好好地去學習。開學之後資料結構老師提了好幾次歸併排序,我發現模板 我已經忘的一乾二淨了。於是這兩天重新學了一遍。所謂歸併排序,就是將兩個排好序的序列歸併在一起,形成乙個新序列。那麼,如何得到排好序的序列呢,這裡就體現了分治的思想。我們可以將乙個序列,...
關於歸併排序
我只能說看懂歸併排序,你的遞迴思想會再有乙個昇華。其實在之前我做過一道演算法題,用到的就是這種兩個遞迴在一起。馮諾依曼可真是智慧型。我之所以寫成1,2,3,4,3 2 1 根源還是在於遞迴。在重複一句當初我理解遞迴時的最精闢的一句話 在遞迴中的return,不是結束,而是返回它的被調函式。也就是說,...
關於歸併排序和逆序對
今天學習了歸併排序和逆序對,逆序對經過多次測試才成功,所以傳上來以作紀念,新手創作,不喜勿噴 歸併排序 public static void mergesort1 int arrs mergesort1 arrs,0,arrs.length 1 public static void mergesor...