|
@@ -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)
|
|
|
+}
|