Go语言之简单算法的实现——归并排序算法

Go语言之简单算法的实现——归并排序算法

1.1 归并排序升序算法

/**
 * @title	merge
 * @description 归并算法, 将两个已经有序的子序列归并为一个有序的序列
 * 空间复杂度: O(2n)
 * 时间复杂度: O(n)
 * @auth: ncuwen
 * @param: left	需要进行归并的左子序列
 * @param: right	需要进行归并的右子序列
 */
func merge(left, right []float32) []float32 {
	result := make([]float32, 0)
	i, j := 0, 0 // left和right的index位置
	lSize, rSize := len(left), len(right)
	for i < lSize && j < rSize {
		if left[i] < right[j] {
			result = append(result, left[i])
			i++
			continue
		}
		result = append(result, right[j])
		j++
	}
	result = append(result, left[i:]...)
	result = append(result, right[j:]...)
	return result
}

/**
 * @title	MergeSort
 * @description 归并排序算法(递归)
 * 空间复杂度: O(2n)
 * 时间复杂度: O(n)
 * @auth: ncuwen
 * @param: point	需要进行排序的切片
 * @return: 已排序的切片
 */
func MergeSort(point []float32) []float32 {
	if len(point) < 2 {
		return point
	} else {
		i := len(point) / 2
		left := MergeSort(point[0:i])
		right := MergeSort(point[i:])
		result := merge(left, right)
		return result
	}
}

[Github源码地址] : https://github.com/NcuWen/Arithmetic

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值