void mergesort(int *,int *,unsigned int,unsigned int);
void msort(int *arr,int cont);
int main(int argc,const char *argv[])
{
int arr_1[16] = {0}, arr_2[16] = {0};
int i = 0;
printf("arr_1:");
for(;i<16;i++){
arr_1[i] = rand()%100;
printf("%d ",arr_1[i]);
}
printf("\n");
/*
printf("arr_2:");
for(;i<16;i++){
arr_2[i] = rand()%100;
printf("%d ",arr_2[i]);
}
printf("\n");
*/
msort(arr_1,16);
printf("\narr_1:");
for(i=0;i<16;i++){
printf("%d ",arr_1[i]);
}
printf("\n");
return 0;
}
void mergesort(int *arr,int *arrtmp,unsigned int start,unsigned int end){
if( start>=end )return;
int mid = start+(end-start)/2;
int istart1=start,iend1=mid;
int istart2=mid+1,iend2=end;
mergesort(arr,arrtmp,istart1,iend1);
mergesort(arr,arrtmp,istart2,iend2);
int ii = start;
while(istart1<=iend1 && istart2<=iend2)
arrtmp[ii++]=arr[istart1]<arr[istart2]?arr[istart1++]:arr[istart2++];
while(istart1<=iend1)
arrtmp[ii++]=arr[istart1++];
while(istart2<=iend2)
arrtmp[ii++]=arr[istart2++];
memcpy(arr+start,arrtmp+start,(end-start+1)*sizeof(int));
}
void msort(int *arr,int cont){
if(cont <2 )return;
int arrtmp[cont];
mergesort(arr,arrtmp,0,cont-1);
}
归并排序
最新推荐文章于 2024-12-15 17:47:59 发布