排序

归并排序

package main

import (
    "fmt"
)

func mergeSort(low, high int, a *[]int) {
    if low >= high {
        return
    }
    mid := (low + high) / 2
    mergeSort(low, mid, a)
    mergeSort(mid+1, high, a)
    merge(a, low, mid, high)
}

func merge(a *[]int, low, mid, high int) {
    var temp = make([]int, high-low+1)
    i, j, k := low, mid+1, 0
    for i <= mid && j <= high {
        if (*a)[i] <= (*a)[j] {
            temp[k] = (*a)[i]
            i++
        } else {
            temp[k] = (*a)[j]
            j++
        }
        k++
    }
    for i <= mid {
        temp[k] = (*a)[i]
        i++
        k++
    }
    for j <= high {
        temp[k] = (*a)[j]
        j++
        k++
    }
    for m := 0; m < high-low+1; m++ {
        (*a)[m+low] = temp[m]
    }

}
func main() {
    a := []int{3, 5, 4, 7, 3, 8, 1}
    mergeSort(0, 6, &a)
    for _, v := range a {
        fmt.Println(v)
    }
}

 

posted @ 2020-08-05 10:48  LeeJuly  阅读(77)  评论(0编辑  收藏  举报