請實作 合併排序(Merge Sort) 演算法,將一個整數陣列 $\text{arr}$ 排序為 非嚴格遞增序列(允許重複元素,數字由小到大排列)。
你需要實作並上傳兩個函式:
merge函式功能如下:
arr,已知區間 $[\text{left}, \text{mid})$ 與 $[\text{mid}, \text{right})$ 分別為非嚴格遞增序列。merge_sort函式功能如下:
arr 中任意區間 $[\text{left}, \text{right})$ 排序為非嚴格遞增序列。merge 完成排序。評測時,你所實作的 merge 與 merge_sort 函式會被放入以下程式碼中進行測試:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void merge(vector<int> &arr, int left, int mid, int right){
    // TODO
}
void merge_sort(vector<int> &arr, int left, int right){
    // TODO
}
int main() {
    // input
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    // process
    merge_sort(arr, 0, n);
    // output
    for (auto x : arr) {
        cout << x << " ";
    }
    cout << "\n";
    return 0;
}
請上傳你實作的 merge 與 merge_sort 函式,並包含你需要使用的標頭檔與命名空間,例如:
#include <...>
using namespace ...;
void merge(vector<int> &arr, int left, int mid, int right){
    // TODO
}
void merge_sort(vector<int> &arr, int left, int right){
    // TODO
}
輸出 $n$ 個正整數,代表將原陣列依 非嚴格遞增 順序排序後的結果。
數字之間以單一空白分隔。
| No. | Testdata Range | Score | 
|---|---|---|
| 1 | 0~9 | 100 |