首页 > 编程语言 > 详细

用golang刷算法--归并排序算法

时间:2020-05-26 15:41:02      阅读:45      评论:0      收藏:0      [点我收藏+]

归并排序算法流程

并归排序采用的是分治的思想,先将乱序的数组逐级拆分成一个个小部分,最底层每个部分长度为一(各个部分视为有序),然后在将有序的部分按照完全二叉树两两合并逐级往上,直到排序结束

参考如下图片(来源:https://www.cnblogs.com/chengxiao/p/6194356.html)

技术分享图片

每部分的合并规则如下:

技术分享图片

用golang实现

func MergeSort(intList []int) []int {
	length := len(intList)
	// 长度为0直接退出
	if length <= 1 {
		return intList
	}

	// 先分
	middle := length / 2
	left := MergeSort(intList[:middle])
	right := MergeSort(intList[middle:])
	// 后治
	return merge(left, right)
}

func merge(left, right []int) []int {
	leftLen := len(left)
	rightLen := len(right)
	// 定义i,j指针指向left,right的,开始
	i, j := 0, 0
	// 定义临时切片
	temp := make([]int,0)
	for i < leftLen && j < rightLen {
		if left[i] < right[j] {
			// 将左边的值放入temp
			temp =append(temp, left[i])
			// i++
			i++
		}else{
			// 将右边的值放入temp
			temp =append(temp, right[j])
			// j++
			j++
		}
	}
	// 结束循环后会多有一个切片有余
	if i < leftLen {
		// 如果左边有余
		temp = append(temp, left[i:]...)
	} else if j < rightLen {
		// 如果右边有余
		temp = append(temp, right[j:]...)
	}
	return temp
}

用golang刷算法--归并排序算法

原文:https://www.cnblogs.com/kainhuck/p/12965748.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!