奥村本を参考に選択ソートの実装。arrayではなくlistを使う。
再帰などは使わずにC言語っぽい感じで。コードは以下の通り。
(define (selectsort a) (define min_a 0) (define k 0) (define n (length a)) (do ((i 0 (+ i 1))) ((>= i (- n 1))) ;;; body (set! min_a (list-ref a i)) (set! k i) (do ;;; update ((j (+ i 1) (+ j 1))) ;;; condition ((>= j n)) ;;; body (if (< (list-ref a j) min_a) (begin (set! min_a (list-ref a j)) (set! k j) ) ) ) (list-set! a k (list-ref a i)) (list-set! a i min_a) ) a ) (define (main args) (print (selectsort (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 9 1 0 3 7 6 (0 1 2 3 5 6 7 9)
リストについてはこちらを参考にした。