public class MergeSort {
/*
歸并(Merge)排序法是將兩個(gè)(或兩個(gè)以上)有序表合并成一個(gè)新的有序表,
即把待排序序列分為若干個(gè)子序列,每個(gè)子序列是有序的,然后再把有序子序列合并為整體有序序列。
*/
// 歸并所需的輔助數(shù)組
private static int[] aux;
/**
* 自頂向下的歸并排序
* @param a 待排序的數(shù)組
* @param low 低位索引
* @param high 高位索引
*/
public static void mergeSort(int[] a, int low, int high) {
// 一次性分配空間
aux = new int[a.length];
// 將數(shù)組a[low..high]排序
if (low >= high)
return;
int mid = low + (high - low)/2;
mergeSort(a, low, mid); // 將左半邊排序
mergeSort(a, mid+1, high); // 將右半邊排序
merge(a, low, mid, high); // 歸并結(jié)果
}
// 原地歸并
public static void merge(int[] a, int low, int mid, int high) {
// 將a[low..mid] 和 a[mid+1..high] 歸并
int i = low;
int j = mid+1;
// 將a[low..high]復(fù)制到aux[low..high]
for (int k = low; k <= high; k++) {
aux[k] = a[k];
}
// 歸并回到a[low..high]
for (int k = low; k <= high; k++) {
if (i > mid)
a[k] = aux[j++];
else if (j > high)
a[k] = aux[i++];
else if (aux[i] > aux[j])
a[k] = aux[j++];
else
a[k] = aux[i++];
}
}
public static void main(String[] args) {
int[] a = new int[] {2, 4, 7, 5, 11, 3, 1, 9, 7, 8, 10, 6, 2, -1, 0, -2};
mergeSort(a, 0, a.length-1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
歸并排序
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 選擇排序 對(duì)于任何輸入,時(shí)間為O(n*n); 冒泡排序 最優(yōu)(對(duì)于升序的數(shù)組,因?yàn)榧尤肓艘粋€(gè)跳出判斷):O(n),...
- 插入排序、希爾排序、堆排序、歸并排序 --c語言實(shí)現(xiàn) 逐漸添加中....
- 一般來說,這三者的時(shí)間復(fù)雜度O(NlogN),空間復(fù)雜度O(n)優(yōu)化后,空間復(fù)雜度均可為O(1),如下文中的快排和...
- -希爾排序 克服插入排序每次只能交換一對(duì)元素的缺點(diǎn)5-間隔的排序,3-間隔的排序,1-間隔排序(最后必須是1-間隔...
- 域名被盜,站長們會(huì)煩惱,黑客盜走域名,創(chuàng)建無數(shù)二級(jí)域名指向到博彩、色性、私服等非法內(nèi)容的網(wǎng)站上,網(wǎng)站權(quán)重降低不說,...