编辑代码

#include <stdio.h>

void merge_sort(int * arr, int left, int right);

void merge(int * arr, int left, int right, int mid);

void print(int (*arr)[], int length);

int main () {
  
    int arr[] = {2,8,5,43,3,2,6,7,8,1};
    int length = sizeof(arr)/sizeof(*arr);
    print(&arr, length);

    printf("\r\n ");

    merge_sort(arr, 0, length -1);
    print(&arr, length);

    return 0;
}  

void print(int (*arr)[], int length){
    for(int i = 0; i < length; i++){
        printf("%d ", *((*arr) + i) );
    }
}

void merge_sort(int * arr, int left, int right){
    if( left < right ){
       int mid = (left + right) / 2;
       merge_sort(arr, left, mid);
       merge_sort(arr, mid + 1, right);

       merge(arr, left, right, mid);
    }

}

void merge(int * arr, int left, int right, int mid){
    int temp_length = right - left + 1;
    int temp[temp_length];
    int i, start = left;
    while(left <= mid || mid <= right){
        if( *(arr + left) < *(arr + mid)){
            temp[i++] =  *(arr + left);
            left++;
        }else{
            temp[i++] =  *(arr + mid);
             mid++;
        }
    }

    while( left <= mid){
        temp[i++] = *(arr + left);
        left++;
    }

    while(mid <= right){
        temp[i++] = *(arr + mid);
        mid++;
    }

    for(int n=0; n < sizeof(temp); n++){
        *( arr+ start + n ) = temp[n];
    }

}