読者です 読者をやめる 読者になる 読者になる

ichiroc subset

書きながら考える・考えをまとめる場所

DOS で Sleep sort

Sleep sort という面白いソートアルゴリズムが発明されました。

Sleep sortの各言語での実装まとめ http://www.yuyak.com/1339

何か自分でも作ってみようかなー、と思ったのですが、既に大方のものは作られてます。 一覧を眺めていると、ふとDOSが無いことに気づきました。

ネタ的には少し遅いし、いい加減面白くないとは思うのですが、 出来そうだなーという算段があったので、やってみました。

先ずSleep の代用となる、以下のバッチファイルを作成

rem 副作用あるけど・・
ping 127.0.0.1 -n %1
echo %1 >> result.txt
exit

DOSにはSleepが無い、という致命的な欠陥があるのですが、 今までの業務で得たバッドノウハウよろしく、 Ping で代用です。

肝心の Sort 部分


@echo off
for %%v in (%*) do ( echo %%v >> all_numbers.txt )
set max=0
for /f %%a in (all_numbers.txt) do call :set_max_if_gtr %%a

for %%v in (%*) do start /MIN sleep.bat %%v
ping 127.0.0.1 -n 2 > nul
ping 127.0.0.1 -n %max% > nul
type result.txt
del result.txt
del all_numbers.txt
exit /B

:set_max_if_gtr
if %1 GTR %max% set max=%1

実行結果

C:\Users\Me\Desktop>sleep_sort.bat 8 3 5 6 1 9 4 2
1
2
3
4
5
6
8
9

あっはっはっは。出来た! バッチファイル分かりにく! 絶対これで込み入った事やりたくないですね!