奥村本を参考にバブルソートの実装。arrayではなくlistを使う。
前回同様C言語っぽい感じで。コードは以下の通り。
(define (bubblesort a) (define n (length a)) (define k (- n 1)) (define x 0) (define j 0) (do ;;; update () ;;; condition ((< k 0)) ;;; body (begin (set! j -1) (do ;;; update ((i 1 (+ i 1))) ;;; condition ((> i k)) ;;; body (if (> (list-ref a (- i 1)) (list-ref a i)) (begin (set! j (- i 1)) (set! x (list-ref a j)) (list-set! a j (list-ref a i)) (list-set! a i x) ) ) ) (set! k j) ) ) a ) (define (main args) (print (bubblesort (map (lambda (x) (string->number x)) (cdr args)))) )
実行結果は以下の通り。
(CPU : Intel Core i5 2.6GHz, OS : Windows 10, Gauche 0.9.9)
> gosh .\main.scm 5 2 6 8 4 1 3 0 (0 1 2 3 4 5 6 8)
参考文献