基本思路:
递归拆分数组,直到只有一个元素,然后进行有序的合并。
#include <stdio.h>
#define N 9
void mergesort(int a[], int first, int last, int temp[]);
void merge(int a[], int first, int mid, int last, int temp[]);
void printarr(int a[], int n);
void mergesort(int a[], int first, int last, int temp[]) {
if(first<last){
int mid = (first + last)/2;
mergesort(a, first, mid, temp);
mergesort(a, mid+1, last, temp);
merge(a, first, mid, last, temp);
}
}
void merge(int a[], int first, int mid, int last, int temp[]){
int i = first;
int j = mid + 1;
int k = 0;
while(i<=mid && j<=last){
if(a[i]<a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while(i<=mid) temp[k++] = a[i++];
while(j<=last) temp[k++] = a[j++];
for(i=0; i<k; i++)
a[first+i] = temp[i];
}
void printarr(int a[], int n){
int i;
for(i=0; i<n; i++){
printf("%d ", a[i]);
}
printf("\n");
}
int main(void) {
int a[N] = {45, 8, 7, 31, 56, 54, 99, 33, 24};
int temp[N] = {0};
mergesort(a, 0, N-1, temp);
printarr(a, N);
return 0;
}