●高速なソートが出来たのですが、残念ながらハンドラではありません
これまでの実験結果を元に 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