イケッチロゴ

Applescript実験室

イケッチトップページ

作品

リンク


Applescript実験室

自作スクリプト


●高速なソートが出来たのですが、残念ながらハンドラではありません

これまでの実験結果を元に a reference to を用いて並べ替えの時間計測をしてみました、ランダムな整数5000個の要素を持つリストを作り、それをソートしています。これまでのリスト参照の実験の結果から、自作スクリプトに載せているソートのスクリプトに手を加えたものです。時間を計測すると私のパソコン(G4 1.25*2)で17秒でした。
アップルスクリプトとしては、かなり高速ですが、残念ながら見ての通り、ハンドラ(サブルーチン)になっていません。ハンドラ内で参照形式(a reference to)を設定すると、エラーを起こしてしまうので、とりあえずこのような形での実験になりました。
ハンドラに出来ないと決めつけるのもよくないので、何か思いついたらまた実験してみます。


--ランダムな数値からなるリストを作成

set N to {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

set numList to {}

set theList to a reference to numList

repeat 5000 times

set end of theList to (some item of N) * 100 + (some item of N) * 10 + (some item of N)

end repeat


set T to current date --時間計測開始


set sortList to {}

set sortListRef to a reference to sortList

set {end of sortListRef, i} to {item 1 of theList, 2}

repeat (count theList) - 1 times

set {aItem, A, Z} to {item i of theList, 1, i}

repeat until A = Z

if item ((A + Z) div 2) of sortListRef > aItem then

set Z to (A + Z) div 2

else

set A to (A + Z) div 2 + 1

end if

end repeat

if A = 1 then

set beginning of sortListRef to aItem

else if A = i then

set end of sortListRef to aItem

else

set sortList to items 1 thru (A - 1) of sortListRef & {aItem} & (items A thru -1 of sortListRef)

end if

set i to i + 1

end repeat


sortList

(current date) - T --時間計測終了


結果 17

Iketch Design Office, All Rights Recerved.