编辑代码

#include <stdio.h>
#include <stdlib.h>

void merge(int arr[], int arrStart, int mid, int arrEnd) {
    int i = arrStart;
    int j = mid;

    int arrLen = arrEnd - arrStart;

    if(arrLen < 2) {
        return;
    }

    int *temp = malloc(sizeof(int) * (arrEnd - arrStart));

    int tempIndex = 0;

    while(i < mid && j < arrEnd) {

        if(arr[i] > arr[j]) {
            temp[tempIndex] = arr[j];
            ++j;
        }else {
            temp[tempIndex] = arr[i];
            ++i;
        }

        ++tempIndex;

    }

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

    while(j < arrEnd) {
        temp[tempIndex++] = arr[j++];
    }

    for ((tempIndex = 0, i = arrStart); (tempIndex < arrLen && i < arrEnd); (++tempIndex, ++i)) {
        arr[i] = temp[tempIndex];
    }
}

void mergeSort(int arr[], int arrStart, int arrEnd) {
    int arrLen = arrEnd - arrStart;  // 数组个数8

    if (arrLen == 1) {
        return;
    }

    int mid = arrStart + arrLen / 2;

    mergeSort(arr, arrStart, mid);
    mergeSort(arr, mid, arrEnd);

    merge(arr, arrStart, mid, arrEnd);
}

int main () {

    int array[] = {11, 8, 3, 9, 7, 1, 2, 5};

    printf("排序前:");
    for (int i = 0; i < 8; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    mergeSort(array,0,8);

    printf("排序后:");
    for (int i = 0; i < 8; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    return 0;
}