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