Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
歪 : クイックソート
[go: Go Back, main page]

die kato
クイックソートをいろんな言語で実装しよう、という企画が某所でありまして、投稿用に書いたもの+αです。

Common Lisp

(defun qs (s)
  (if s   
    (append
      (qs (remove (car s) (cdr s) :test #'<=))
      (list (car s))
      (qs (remove (car s) (cdr s) :test #'>)))))

Ruby

class Array
    def qs
        if size > 1
            self[1..-1].delete_if{|x| x >= first}.qs +
            [first] +
            self[1..-1].delete_if{|x| x < first}.qs
        else
            self
        end
    end
end

Matzさんご本人によるRuby版クイックソートはこちら。 Python版とHaskell版もいっしょに書かれてます。

PostScript

/car {0 get} def
/cdr {dup 1 exch length 1 sub getinterval} def
/qs {
    dup length 1 gt {
        1 dict begin
            /x exch def
            [
                [ x cdr {dup x car ge {pop} if} forall ] qs aload pop
                x car
                [ x cdr {dup x car lt {pop} if} forall ] qs aload pop
            ]
        end
    } if
} def

Bash

某先生との共作。
remove() {
   f=$1;shift
    if let $#-1
    then
        [ $1 $f $2 ] || echo -n "$2 "
        remove $f $1 ${@:3}
    fi
}

qs() {
    if let $#
    then
        local car=$1
        local cdr=${@:2}
        echo -n "$(qs $(remove -le $car $cdr)) "
        echo -n "$car " 
        echo    "$(qs $(remove -gt $car $cdr))" 
    fi
}

Smalltalk

!SequenceableCollection methodsFor: 'basic'!
rest
    ^self copyFrom: 2 !

!SequenceableCollection methodsFor: 'sorting'!
quickSort
    self size > 1
        ifTrue: [
            ^(self rest reject: [ :x | x >= self first ]) quickSort,
            (Array with: self first),
            ((self rest reject: [ :x | x < self first ]) quickSort) ] ! !

履歴

2002/10/02 11:28:06 - Initial revision
2003/03/29 19:52:54 - ruby のコードを書き直し
2003/03/29 20:03:41 - まちがい。
2004/04/08 19:59:47 - Matzさん版へリンク追加。
2004/09/05 15:32:17 - Bash版を、テストしやすいように、ちょっと修正。
2004/09/27 18:44:59 - PostScript版書き直し、Smalltalk版追加
2004/11/17 10:06:54 - スペルミス修正

追記

名前:
コメント:
  • XHTML タグの一部、MathML タグの一部、及び独自タグが使用できます。
    使用可能なタグの一覧はこちらをご覧下さい。
  • <&lt;&&amp; のようにエスケープする必要があります。
  • 改行はひとつの空白と同等に見なされます。
  • 「プレビュー」にチェックを入れると、投稿前にプレビューを見て確認することができます。
プレビュー
[編集] [新規] [添付] [管理]