#include<stdio.h>
#define HAXSIZE 8
//实现归并,将数据放到lift中。
void nerging(int *left,int left_size,int *right,int right_size){
int i,j,k;
int temp[HAXSIZE];
i = j = k =0;
while(i < left_size && j <right_size){
if(left[i] < right[j]){
temp[k++] = left[i++]; //保存小的进数组
//printf("left = %d\n",*(left));
}else{
temp[k++] = right[j++];
//printf("right = %d\n",*(right));
}
}
while(i < left_size){ //将未保存的数保存进数组
temp[k++] = left[i++];
}
while(j < right_size){
temp[k++] = right[j++];
}
for(int n=0;n<(left_size+right_size);n++){
left[n] = temp[n];
//printf("%d\t",left[n]);
}
//printf("\n\n");
}
void MergeSort(int a[],int n){
if(n>1){ //注意每次递归返回点left、left_size值
int *left = a;
int left_size = n/2;
//printf("%d\t",left_size);
int *right = a+n/2;
int right_size = n-left_size;
//printf("%d\n",right_size);
MergeSort(left,left_size); //递归调用
MergeSort(right,right_size);
nerging(left,left_size,right,right_size);
}
}
int main(void){
int a[8] = {3,2,5,8,4,7,6,9};
MergeSort(a,8);
for(int i=0;i<8;i++){
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}