golanglabs

Log | Files | Refs | README | LICENSE

fisher_yates.go (273B)


      1 package dsa
      2 
      3 import (
      4 	"math/rand/v2"
      5 )
      6 
      7 func FisherYates(s []int) []int {
      8 	for i := int32(len(s) - 1); i > 0; i-- {
      9 		r := rand.Int32N(i)
     10 		s[i], s[r] = switchPos(s[i], s[r])
     11 	}
     12 
     13 	return s
     14 }
     15 
     16 func switchPos(x int, y int) (int, int) {
     17 	z := x
     18 	x = y
     19 	y = z
     20 
     21 	return x, y
     22 }