(define (partition v imin imax) (let ((x (vector-ref v imin))) (let loop () (let loop1 () (if (> (vector-ref v imax) x) (begin (set! imax (- imax 1)) (loop1)))) (let loop2 () (if (< (vector-ref v imin) x) (begin (set! imin (+ imin 1)) (loop2)))) (if (< imin imax) (begin (swap v imin imax) (set! imin (+ imin 1)) (set! imax (- imax 1)) (loop)) imax))))