#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;
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;
}