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