歸併排序步驟:
1.確定分界點(按照中間位置分為兩段)
2.遞迴處理兩段區間
3.合併兩段處理後有序區間(歸併)
#include
using
namespace std;
const
int maxn =
100005
;int value[maxn]
;int temp[maxn]
;//臨時儲存合併陣列
//歸併排序
void
merge_short
(int l,
int r)
//將區間從中間位置分為兩段
int mid =
(l + r)
>>1;
//遞迴處理排序左右兩段區間
merge_short
(l, mid)
;merge_short
(mid+
1, r)
;//合併左右連段有序區間
//i,j分別指向左右兩端起始點,k指向合併陣列起始點(合併後陣列儲存在temp[l~r]中)
int i = l, j = mid+
1, k = l;
//合併
while
(i <= mid && j <= r)
else
}while
(i <= mid)
while
(j <= r)
//處理value陣列,使之有序,即拷貝臨時陣列
for(
int i = l; i <= r; i++)}
intmain()
merge_short(0
, n-1)
;for
(int i =
0; i < n; i++
) cout << endl;
return0;
}
Acwing 787 歸併排序
給定你乙個長度為n的整數數列。請你使用歸併排序對這個數列按照從小到大進行排序。並將排好序的數列按順序輸出。輸入格式 輸入共兩行,第一行包含整數 n。第二行包含 n 個整數 所有整數均在1 109109範圍內 表示整個數列。輸出格式 輸出共一行,包含 n 個整數,表示排好序的數列。資料範圍 1 n 1...
歸併排序模板 ACwing 787
歸併排序其實也是分治的思想 首先歸併排序跟快排一樣同樣需要考慮分界點 歸併排序的分界點都是取中間值 其次歸併排序需要遞迴排序左邊和右邊 最後一部也是最難的一部需要將分開的歸併排序合二為一 includeusing namespace std intn const int n 100010 int a...
787 歸併排序
題目描述 給定你乙個長度為n的整數數列。請你使用歸併排序對這個數列按照從小到大進行排序。並將排好序的數列按順序輸出。輸入格式 輸入共兩行,第一行包含整數 n。第二行包含 n 個整數 所有整數均在1 109範圍內 表示整個數列。輸出格式 輸出共一行,包含 n 個整數,表示排好序的數列。資料範圍 1 n...