Racket/Fisher-Yates Shuffle

Från Täpp-Anders
Version från den 18 maj 2026 kl. 14.11 av Anders (diskussion | bidrag) (Skapade sidan med '#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))...')
Hoppa till navigeringHoppa till sök
  1. 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))