投稿者 スレッド: シェルソート  (Read 6614 times)

kawachi

  • ゲスト
シェルソート
« 投稿日:: 2014年 8月 07日 , 午後 05:55:36 »
PC8000でシェルソートと2分木ソートのプログラムを持っていたのですが、捜しても見つからなくなりました。
そこで、VBのプログラムをもとに以下を作成したのですが、エラー出てしまいます。
「エラー:コマンドLETの実行で型の不一致が起きました。(24行,9桁)」
ちょっと手詰まり状態です。
おわかりでしたら、ご教示ください。

乱数を発生させてシェルソートで並べ替えるというものです。

dim Lis(1100)

randomize
for i=0 to 999
b=int(rnd(1)*1000+1)
print using "######";b;
lis(i)=b
next
print
print
print"---------------------------------------"
print
print

Total=1000
hajime=Timer

rem VBのプログラムをもってきました。

Offset = Total / 2
Do While Offset > 0
Limit = Total - Offset
Do
Switch = False
For Loop1 = 0 To Limit
If Lis(Loop1) > Lis(Loop1 + Offset) Then
Tmp = Lis(Loop1)
Lis(Loop1) = Lis(Loop1 + Offset)
Lis(Loop1 + Offset) = Tmp
Switch = True
Limit = Loop1 - Offset
End If
Next Loop1
Loop While Switch
Offset = Offset / 2
Loop

for i=1 to 1000
print using"######";lis(i);
next

print
print

owari = Timer
Print Round(owari-hajime,2);"秒"

tiny basicでプログラムがありましたら教えていただけないでしょうか。
よろしくお願いいたします。

takeuchi

  • 管理人
  • *****
  • 投稿: 97
Re:シェルソート
« Reply #1 投稿日:: 2014年 8月 08日 , 午前 02:06:33 »
こんばんは,

> 「エラー:コマンドLETの実行で型の不一致が起きました。(24行,9桁)」

Switch = False

エラーはこの部分です。
今の場合,Switchは普通数値変数になります。
False はtbasic では偽を意味するBoolean 定数ですから,型の不一致になります。
SwitchをBooleanにするには,

Dim Switch as Boolean

と宣言すれば可能です。

> tiny basicでプログラムがありましたら教えていただけないでしょうか。

sort に関しては,配布の sample\Sort フォルダの中にShell-Sort.tbtがあります。
お試しください。