仮想計算機構

IT業界と無縁な派遣社員のブログ

バブルソート

奥村本を参考にバブルソートの実装。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)

参考文献