编辑代码

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

int merge(int *array, int arrStart, int arrMiddle, int arrEnd) {
    int arrLen = arrEnd - arrStart;
    if (arrLen < 2) return 0;

    int *temp = (int *) malloc(arrLen * sizeof(int));
    int i = arrStart;
    int j = arrMiddle;
    int tempIndex = 0;
	int count = 0;

    while (i<arrMiddle && j<arrEnd)
        if (array[i] > array[j])
            temp[tempIndex++] = array[j++];
        else temp[tempIndex++] = array[i++];
        
    while (i < arrMiddle) temp[tempIndex++] = array[i++];
    while (j < arrEnd) temp[tempIndex++] = array[j++];
    // 把排好序的数据拷贝回去
    for ((tempIndex=0, i=arrStart); (tempIndex<arrLen && i<arrEnd); (++tempIndex, ++i))
        array[i] = temp[tempIndex];
    free(temp);
    temp = NULL;
    return 1;
}

int mergeSort(int *array, int arrStart, int arrEnd) {
    int arrLen = arrEnd - arrStart;
    if (arrLen <= 1) return 0;

	int count = 0;
    int middle = arrStart + floor(arrLen / 2);

    mergeSort(array, arrStart, middle);
    mergeSort(array, middle, arrEnd);
    return merge(array, arrStart, middle, arrEnd);
}

int main() {
    int array[] = {2, 4, 3, 1, 5, 6};
    int arrayLen = sizeof(array)/sizeof(int);
    int i = 0;
	for (i=0; i<arrayLen; i++) printf("%d ", array[i]);
	printf("\n");
    int count = mergeSort(array, 0, arrayLen);
    for (i=0; i<arrayLen; i++) printf("%d ", array[i]);
	return 0;
}