Acwing 787 歸併排序

2021-10-02 12:38:58 字數 987 閱讀 9551

歸併排序步驟:

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