编辑代码

#include <iostream>
using namespace std;

bool merge(int arr[], int l, int mid, int r){
    int len = r - l;
    if(len < 2) return false;
    int* tmp = new int(len);
    int i = l, j = mid;
    int idx = 0; 
    while(i < mid && j < r){
        if(arr[i] > arr[j]){
            tmp[idx++] = arr[j++];
        }else{
            tmp[idx++] = arr[i++];
        }
    }
    while(i < mid) tmp[idx++] = arr[i++];
    while(j < r) tmp[idx++] = arr[j++];
    for(int idx = 0, i = l; i < r && idx < len; i++, idx++){
        arr[i] = tmp[idx];
    }
    return true;
}
bool mergeSort(int arr[], int l, int r){
    if((r - l) <= 1) return true;
    int mid = l + r >> 1;
    mergeSort(arr, l, mid);
    mergeSort(arr, mid, r);
    
    return merge(arr, l,mid, r);
}
void Print(int a[], int end){
    for(int i = 0; i < end; i++){
        cout << a[i] << " ";
    }
    cout << endl;
}
int main() {
    int arr[] = {2, 4, 1, 7, 8, 3, 5, 9};
    int len = sizeof(arr)/sizeof(int);
    mergeSort(arr, 0, len);
    Print(arr, len);
    return 0;
}