/**
* 分治算法.
*/
public class MergeSort {
private MergeSort() {
throw new RuntimeException();
}
public static void sort(int[] array) {
if (null == array||array.length<2) {
return;
}
sort(0, array.length, array);
}
private static void sort(int start, int length, int[] array) {
if (length > 2) {
int middle = (int) Math.floor(length / 2);
sort(start, middle, array);
sort(start + middle, length - middle, array);
merge(start, middle, start + middle, length - middle, array);
} else if (length == 2) {
if (array[start+1]<array[start]){
array[start+1] = array[start+1]^array[start];
array[start] = array[start]^array[start+1];
array[start+1] = array[start+1]^array[start];
}
}
}
private static void merge(int aStart, int aLength, int bStart, int bLength, int[] array) {
int aSize = aStart + aLength;
int bSize = bStart + bLength;
while (aStart < aSize && bStart < bSize) {
int a = array[aStart];
int b = array[bStart];
if (b<a){
System.arraycopy(array, aStart, array, aStart + 1, bStart - aStart);
array[aStart] = b;
aStart++;
bStart++;
aSize++;
}else {
aStart++;
}
}
}
}
JAVA分治合并排序(MERGE-SORT)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 合并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法的一個(gè)非常典型的應(yīng)用。合并排序法是將兩個(gè)(或兩個(gè)...
- 耗時(shí) 公式中 n 為參與排序的個(gè)數(shù),T(n) 為排序時(shí)間。 分析 由上面可以看出當(dāng) n 足夠大時(shí) n^2 會(huì)遠(yuǎn)遠(yuǎn)大...
- 核心思想:“分”與“合”。 主體流程 先將一個(gè)序列分成很多個(gè)不能再分割的子序列,將各個(gè)子序列分別排序后再將子序列合...
- basic merg sort給兩個(gè)排好序的序列,將它們混合排序好 NlogN 利用遞歸實(shí)現(xiàn)merge sort:...