C语言—归并排序

归并排序

思想:分治(从下而上)

void process(int arr[],int L,int mid,int R)
{
	int* a=(int*)malloc(sizeof(int)*(R-L+1);
	int i=L;
	int j=mid+1;
	int k=0;
	while(i<=mid&&j<=R)
	{
		if(arr[i]<arr[j])
			a[k++]=arr[i++];
		else a[k++]=arr[j++];
	}
	while(i<=mid)
		a[k++]=arr[i++];
	
	while(j<=R)
		a[k++]=arr[j++];
	
	int n=0;
	for(;n<k;++n)
		arr[L++]=a[n];
}

void mergesort(int arr[],int L,int R)
{
	if(L==R)
		return ;
	int mid=L+((R-L)>>1);
	mergesort(arr,L,mid);
	mergesort(arr,mid+1,R);
	process(arr,L,mid,R);
}
	
上一篇:【无标题】


下一篇:工作中遇到的问题