归并排序 Go 语言实现

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(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
}

你可能感兴趣的:(归并排序 Go 语言实现)