归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。
时间复杂度: O(nlog(n))
空间复杂度: O(n)
func MergeSort(a []int) []int {
if len(a) < 2 {
return a
}
m := len(a) / 2
l := MergeSort(a[:m])
r := MergeSort(a[m:])
return merge(l, r)
}
func merge(a, b []int) (c []int) {
i, j := 0, 0
for i < len(a) && j < len(b) {
if a[i] <= b[j] {
c = append(c, a[i])
i++
} else {
c = append(c, b[j])
j++
}
}
c = append(c, a[i:]...)
c = append(c, b[j:]...)
return
}
网友评论