0x67cq/blog

Go标准库阅读计划一 Perm(洗牌算法)

0x67cq opened this issue · 0 comments

func Perm(r *rand.Rand, n int) []int {
    m := make([]int, n)
    for i := 0; i < n; i++ {
        j := r.Intn(i + 1)
        fmt.Println("I:",i,"j:",j)
        m[i] = m[j]
        m[j] = i
   }
   return m
}

算法语言表述: 把当前列某一节点Y的值取给新加入节点X,然后维护一个0~N的递增队列,从这个递增队列里取一个最大的N赋给Y的值。