归并排序(C语言)

158 阅读1分钟

原理

采用二分的思想,将排好序的数组在合并

void sort(int *arr,int l,int r){   
	if(l>=r){
		return;
	}
	int m=(r-l)/2+l;
	sort(arr,l,m);
	sort(arr,m+1,r);
	int s[10];
	int k=0;
	int i=l;
	int j=m+1;
	for(;i<=m&&j<=r;){
		if(arr[i]<arr[j]){
			s[k++]=arr[i++];
		}else{
			s[k++]=arr[j++];
		}
	}
	while(i<=m)
		s[k++]=arr[i++];
	while(j<=r)
		s[k++]=arr[j++];					
	for(int i=0,j=l;j<=r;i++,j++){    //s是临时数组,用来保存排好序的那一块数据,它 
		arr[j]=s[i];		 //它的下标是从0开始,而arr的下标是从本层的左端开始									
}