; interleaved increasing-decreasing sort

(define (f xs)
  (let ((xs (sort xs <))
        (len (vector-length xs)))
    (do ((lo 1 (+ lo 2))
         (hi (- len (if (even? len) 1 2)) (- hi 2)))
        ((<= hi lo) xs)
      (let ((t (vector-ref xs lo)))
        (vector-set! xs lo (vector-ref xs hi))
        (vector-set! xs hi t)))))

(display (f '#(0 1 2 3 4 5 6 7 8 9))) (newline)