排序----归并排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

归并排序采用一种分治的思想,分治就是说分而治之
在这里插入图片描述

二、使用步骤

1.归并分为两个步骤,首先第一个步骤就是说,先将其分开,第二步就是将有序集合进行合并
代码实现

//将要排序的数组传入
public void sort(int arr[]){
	//避免在递归中不停的创造数组
	int temp[]=new int[arr.length];
	sort(arr,0,arr.length-1;temp);
}
public void sort(int [] arr,int l,int r,int []temp){
//将数组分裂
	if(l<r){
		int mid=l+(r-l)/2;//避免数组越界
		//对左数组进行归并
		sort(arr,l,mid,temp);
		//对右边数组进行归并排序
		sort(arr,mid+1,right,temp);
		//合并有序子序列
		Merge(arr,l,mid,r,temp);
	}
}
//合并子序列的函数
public void Merge(int arr[],int l,int mid,int r,int[]temp){
	//从左序列开始的指针
	int left=l;
	//从右序列开始的指针
	int right=mid+1;
	int t=0;//临时数组上的指针
	while(left<=mid&&right<=r){
		if(arr[left]<=arr[right])
			temp[t++]=arr[left++]	
		}else{
		temp[t++]=arr[right++];
	}
	//出来循环后,
	//将剩余元素补充进入临时数组当中
	while(left<=mid){
		temp[t++]=arr[left++];
	}
	while(right<=r){
		temp[t++]=arr[right++];
	}
//将临时数组中的元素赋值给原数组
		t=0;
		while(left<=right){
			arr[left++]=temp[t++];
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值