从网上学习,并调试通过:
#include <stdio.h>
#define MAX 10
int array[MAX];
void init() {
int a;
printf("intput %d numbers:\n", MAX);
for (a = 0; a < MAX; a++) {
scanf("%d", &array[a]);
}
printf("input over.\n");
}
void merge( int low, int mid, int high) {
int h,k,i,j;
int new_array[MAX];
h = low;
i = 0;
j = mid + 1;
while(h <= mid && j<= high) {
if ( array[h] <= array[j]) {
new_array[i] = array[h];
h++;
} else {
new_array[i] = array[j];
j++;
}
i++;
}
while(h<= mid)
new_array[i++] = array[h++];
while(j<=high)
new_array[i++] = array[j++];
for ( i = 0, k=low; i<= high-low;i++,k++)
array[k] = new_array[i];
}
void mergesort(int low, int high) {
int mid;
if(low < high) {
mid = (high + low)/2;
mergesort(low, mid);
mergesort(mid+1, high);
merge(low, mid, high);
}
}
void print()
{
int i;
for (i = 0; i< MAX; i++) {
printf("array[%d] is %d\n", i, array[i]);
}
}
void main(void)
{
init();
print();
mergesort(0, MAX-1);
printf("after sort array:\n");
print();
}