dengxinyi 6 年之前
父節點
當前提交
52c7347e84
共有 1 個文件被更改,包括 57 次插入0 次删除
  1. 57 0
      oj/algorithms/mergesort/mergesort.go

+ 57 - 0
oj/algorithms/mergesort/mergesort.go

@@ -0,0 +1,57 @@
+package main
+
+import (
+	"fmt"
+	"math/rand"
+	"time"
+)
+
+type ints []int
+
+func (is ints) merge(aux []int, lo, mid, hi int) {
+	for i, j, k := lo, mid+1, lo; k <= hi; k++ {
+		if mid < i {
+			aux[k] = is[j]
+			j++
+		} else if hi < j {
+			aux[k] = is[i]
+			i++
+		} else if is[i] < is[j] {
+			aux[k] = is[i]
+			i++
+		} else {
+			aux[k] = is[j]
+			j++
+		}
+	}
+	copy(is[lo:hi+1], aux[lo:hi+1])
+}
+
+func (is ints) msort(aux []int, lo, hi int) {
+	if hi <= lo {
+		return
+	}
+	mid := lo + (hi-lo)/2
+	is.msort(aux, lo, mid)
+	is.msort(aux, mid+1, hi)
+	is.merge(aux, lo, mid, hi)
+}
+
+func (is ints) sort() {
+	l := len(is)
+	aux := make([]int, l)
+	is.msort(aux, 0, l-1)
+}
+
+func main() {
+	var n int
+	fmt.Scan(&n)
+	var list ints = make([]int, n)
+	rand.Seed(time.Now().Unix())
+	for i := range list {
+		list[i] = rand.Intn(2 * n)
+	}
+	fmt.Println(list)
+	list.sort()
+	fmt.Println(list)
+}