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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章