#lang racket/gui
(require plot
(planet williams/animated-canvas/animated-canvas))
(define (plot-vector v canvas)
(define dc (send canvas get-dc))
(define width (send canvas get-width))
(define height (send canvas get-height))
(parameterize ((plot-decorations? #f))
(plot/dc (discrete-histogram
(for/list ((item (in-vector v))
(i (in-naturals)))
(vector i item)))
dc 0 0 width height))
(send canvas swap-bitmaps)
(yield))
(define (animated-bubble-sort v)
(plot-vector v canvas)
(for ((i (in-range 0 (- (vector-length v) 1))))
(for ((j (in-range (- (vector-length v) 1) i -1)))
(when (< (vector-ref v j) (vector-ref v (- j 1)))
(define temp (vector-ref v j))
(vector-set! v j (vector-ref v (- j 1)))
(vector-set! v (- j 1) temp)
(plot-vector v canvas)))))
(define (main)
(define array
(build-vector
50
(lambda (i)
(random 100))))
(animated-bubble-sort array))
(define frame
(instantiate frame% ("Bubble Sort Animation")))
(define canvas
(instantiate animated-canvas%
(frame)
(style '(border))
(min-width 600)
(min-height 300)))
(send frame show #t)
(main)