#include <stdio.h>
#define MAX_LENGHT 20
void printArr(int arr[], int length) {
for (int i = 0; i < length; i++) {
printf("%d ",arr[i]);
}
printf("\n");
}
void merge(int arr[],int start,int mid,int end) {
//临时数组
int tempArr[MAX_LENGHT];
int i = start;
int j = mid+1;
int k = 0;
while ((i <= mid)&&(j<=end)){
if (arr[i] < arr[j]) {
tempArr[k++] = arr[i++];
} else {
tempArr[k++] = arr[j++];
}
}
//将剩余部分填充
while (i <= mid) {
tempArr[k++] = arr[i++];
}
while (j <= end) {
tempArr[k++] = arr[j++];
}
//将临时数组数据写回,注意,容易出错的地方
for (j = 0, i = start; j < k; i++, j++) {
arr[i] = tempArr[j];
}
return;
}
void mergeSort(int arr[],int start,int end) {
if (start >= end) {
return;
}
int mid = (start + end) / 2;
mergeSort(arr, start, mid);
mergeSort(arr, mid + 1, end);
merge(arr, start, mid, end);
}
int main()
{
int arr[] = { 4, 7, 6, 5, 2, 1, 8, 2, 9, 1 };
int length = sizeof(arr) / sizeof(int);
mergeSort(arr,0,length - 1);
printArr(arr,length);
}