#include <stdio.h> #include <stdlib.h> #include "common.h" #define UNLIMIT 65555 void merge(int *array,int p,int q,int r){ int n1=q-p+2; int n2=r-q+1; int *left=(int*)calloc(sizeof(int),n1); int *right=(int*)calloc(sizeof(int),n2); int i=0; int j=0; for(i=0;i<n1-1;i++){ *(left+i)=*(array+p+i); printf("*(left+i):%d/n",*(left+i)); } for(j=0;j<n2-1;j++){ *(right+j)=*(array+q+j+1); printf("*(right+j):%d/n",*(right+j)); } *(left+n1-1)=UNLIMIT; *(right+n2-1)=UNLIMIT; int k=0; i=j=0; for(k=p;k<=r;k++){ if(*(left+i)<*(right+j)){ *(array+k)=*(left+i); printf("left:array+k:%d/n",*(array+k)); i++; } else{ *(array+k)=*(right+j); printf("right:array+k:%d/n",*(array+k)); j++; } } } void mergesort(int *array,int p,int r){ if(p<r){ int q=p+(r-p)/2;//中间元素的index printf("p:%d q:%d/t",p,q); mergesort(array,p,q); printf("/nq+1:%d r:%d/t",q+1,r); mergesort(array,q+1,r); merge(array,p,q,r); } } int main(){ int array[]={2,1,3,6,8,4,6}; int len=sizeof(array)/sizeof(*array); print(array,len); mergesort(array,0,len-1);//index print(array,len); return 0; }