#include<stdio.h>
#define MAXSIZE 10
void merging(int *list1, int list1_size, int *list2, int list2_size) {
int i,j,k,m;
int temp[MAXSIZE];
i=j=k=0;
while( i<list1_size && j<list2_size ){
if( list1[i] < list2[j] ) {
temp[k++] = list1[i++];
}
else {
temp[k++] = list2[j++];
}
}
while(i<list1_size) {
temp[k++] = list1[i++];
}
while( j < list2_size) {
temp[k++] = list2[j++];
}
for(m=0;m<(list1_size+list2_size);m++){
list1[m] = temp[m];
}
}
void MergeSort(int a[], int n) {
if (n>1){
int *list1 = a;
int list1_size = n/2;
int *list2 = a + n/2;
int list2_size = n - list1_size;
MergeSort(list1,list1_size);
MergeSort(list2,list2_size);
merging(list1,list1_size,list2,list2_size);
}
}
int main() {
int i;
int a[10] = {43,56,7,54,34,78,56,78,12,65};
printf("排序后:");
MergeSort(a,10);
for( i=0; i<10; i++) {
printf("%d ",a[i]);
}
printf("\n");
}
归并排序递归实现
最新推荐文章于 2023-11-04 01:18:11 发布