123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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)
- }
|