Racket/Fisher-Yates Shuffle
Från Täpp-Anders
Hoppa till navigeringHoppa till sök
#lang racket
;; Fisher-Yates shuffle för en lista (modern version, O(n))
(define (fisher-yates lst)
(let ([v (list->vector lst)]) ; Konvertera till vektor för effektiv mutation
(for ([i (in-range (sub1 (vector-length v)) -1 -1)]) ; från n-1 ner till 1
(let ([j (random (add1 i))]) ; slumpmässigt index 0 till i (inklusive)
;; Byt plats mellan i och j
(let ([temp (vector-ref v i)])
(vector-set! v i (vector-ref v j))
(vector-set! v j temp))))
(vector->list v))) ; Returnera som lista igen
;; Exempel:
(fisher-yates '(1 2 3 4 5 6 7 8 9 10))