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

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