归并排序
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) } }