golang 归并排序

package sort
//归并排序
func MergeSort(arr []int)  {
	arrcount := len(arr)
	if arrcount > 1 {
		MergeSort(arr[:arrcount/2])
		MergeSort(arr[arrcount/2:])
		res:= Merge(arr[:arrcount/2],arr[arrcount/2:])
		copy(arr,res)
	}
}
func Merge(arr1,arr2 []int )[]int  {
	res := make([]int,len(arr1)+len(arr2))
	i,j,k,arr1count,arr2count := 0,0,0,len(arr1),len(arr2)		//声明并初始化arr1,arr2的游针,cout
	//如果这两个游针在这两个cout的范围内
	for i < arr1count && j < arr2count{
		if arr1[i] < arr2[j]{
			res[k] = arr1[i]
			k++;i++

		}else {
				res[k] = arr2[j]
				k++;j++
		}//else end
	}//if end
	//对比完成,已经有一方超出数组长度,此时将别一方多余的也合并出res切片
	for i<arr1count{
		res[k]=arr1[i]
		k++;i++
		}
	for j<arr2count{
		res[k]= arr2[j]
		k++;j++
	}
	return res
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值