0
点赞
收藏
分享

微信扫一扫

归并排序算法

陆公子521 2022-03-11 阅读 60

归并排序就是一个数组分成左右两块,左边排好序,右边排好序,新建一个数组,从最小的拿,左边的小就拿左边的放到新数组里面去,右边的小就拿右边的放到新数组里面去。

	public static void process2(int[] arr,int left,int right) {
		if(left == right) {
			return ;
		}
		int mid = left + ((right-left)>>1);
		process2(arr,left,mid);//左边排好序
		process2(arr,mid+1,right);//右边排好序
		
		merge(arr,left,mid,right);//归并
		
		
	}
	public static void merge(int[] arr,int L,int M,int R) {
		int[] help = new int[R-L+1];//需要借助一个新数组
		int i=0;
		int p1 =L;
		int p2 = M + 1;
		while(p1<=M&&p2<=R) {
			
			help[i++] = (arr[p1]<=arr[p2])?arr[p1++]:arr[p2++];//分别设置一个指针,左边小就左边的放进去,右边小右边放。
		}
		
		while(p1<=M) {//如果右边的元素放完了,也就是p2越界了,只需要将左边的依次全部放入新数组就行
			help[i++] = arr[p1++];
		}
		
		while(p2<=R) {//同上
			help[i++] = arr[p2++];
		}
		
		for(int j=0;j<help.length;j++) {
			arr[L+j] = help[j];//拷贝到arr中
		}
	}
举报

相关推荐

0 条评论