Smalltalkでスターリンソート
Smalltalkの練習がてら、かなり賞味期限が切れたネタですがスターリンソートを実装してみました。
Advent Calendarの期限は過ぎていますが、賑やかしにスターリンの誕生日である12月18日のSmalltalk Advent Calendarに載せてみます。
実装内容
immutableなArrayの場合は自身を変えられないのでstalinSort
ではなくstalinSorted
というメソッド名にしています。
SequencableCollection.st
stalinSorted
^ self copy stalinSorted: [ :a :b | a <= b ]
SequencableCollection.st
stalinSorted: aBlock
| result |
result := self copyFrom: 1 to: 1.
(self copyFrom: 2 to: self size) doWithIndex: [ :each :index |
(aBlock value: result last value: each)
ifTrue: [ result := result copyWith: each ]
ifFalse: [ ]
].
^ result
いまだにSmalltalk的な書き方がよくわかりません……。
実行結果
#(6 2 5 7 3 8 8 4) stalinSorted. "#(6 7 8 8)"
#(1 2 1 3 2 3 4) stalinSorted. "#(1 2 3 3 4)"
一応期待通り(?)粛清できているようです。
Author And Source
この問題について(Smalltalkでスターリンソート), 我々は、より多くの情報をここで見つけました https://qiita.com/kueda_sorabito/items/e7cc24ab09b13b418ce2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .