그래서 숙제용 으로는 못쓰는 프로용 코딩을 한번 해보았다



#lang racket
(define (bubble-sort input-vector)
  (let* ([v (vector-copy input-vector)]
         [end-idx (vector-length v)]
         [changed? #f])
    (define (bubble-sort-helper idx)
      (if (= idx end-idx)
          (if (not changed?)
              v
              (begin (set! changed? #f)
                     (bubble-sort-helper 0)))
          (let ([idx+1 (+ idx 1)])
            (if (= idx+1 end-idx)
                (bubble-sort-helper idx+1)
                (let ([n1 (vector-ref v idx)]
                      [n2 (vector-ref v idx+1)])
                  (if (<= n1 n2)
                      (bubble-sort-helper idx+1)
                      (begin (vector-set! v idx n2)
                             (vector-set! v idx+1 n1)
                             (set! changed? #t)
                             (bubble-sort-helper idx+1))))))))
    (bubble-sort-helper 0)))