在sortore 4.0 basic中冒泡排序一串字符串?

时间:2014-03-28 13:58:32

标签: arrays sorting bubble-sort commodore

对commodore 4.0 basic中的字符串数组进行冒泡排序;谁能帮助我?

到目前为止,我有algorithim的'main'部分,但我对如何使它成为子程序感到困惑,因为如何将字符串数组作为参数,以便我可以在之后调用它?

rem: s = holder value
for x = 0 to (length of array with strings)
if array(x)<(array(x+1)) then array(x+1)=s
then array(x+1)=array(x)
then array(x)=s
next
end

1 个答案:

答案 0 :(得分:4)

要进行冒泡排序,您必须在多次传递中循环数据,并在每次传递中跟踪是否已进行任何交换。完成零交换的传递后,您就知道数组已经排序。此外,您的交换逻辑有问题;你必须在s中存储数组(x + 1),然后将数组(x)复制到数组(x + 1),最后将数组放入数组(x)。

我不确定你的意思&#34;我如何将字符串数组作为参数,以便我可以在之后调用它?&#34; Commodore BASIC没有像大多数语言一样的用户定义函数*所以&#34;参数&#34;不是一个非常有用的概念。大多数人会将值传递给变量中的子程序(所有变量都是全局变量),然后子程序也会返回一个或多个值(如果返回任何值)。它由程序员来跟踪用于什么目的的变量,以及从哪个行号子程序开始(以及条件分支和循环起始点所在的位置)。

这是一个我掀起的版本,格式为&#34;结构化&#34;因为我可以在BASIC 2.0中管理;它应该像4.0中一样工作:

100 gosub 150:rem set up array
110 gosub 230:rem sort array
120 gosub 420:rem print array
130 end
140 :
150 rem set up array
160 rem l=length of array
170 l=10
180 dim ar(l)
190 for i=0 to l-1:read ar(i):next
200 data 5,1,4,2,8,7,3,6,9,10
210 return
220 :
230 rem sort array
240 if l<2 then return
250 rem else
260 : rem sw=whether this pass has had any swaps
270 : rem start of pass
280 :   sw=0
290 :   for x=0 to l-2
300 :     if ar(x)<=ar(x+1) then goto 380
310 :     rem else
320 :       rem s=placeholder value
330 :       s=ar(x+1)
340 :       ar(x+1)=ar(x)
350 :       ar(x)=s
360 :       sw=-1
370 :     rem endif
380 :   next
390 : if sw then goto 270
400 return
410 :
420 rem print array
430 if l=0 then print "(empty array)":return
440 rem else
450 : for i=0 to l-1:print ar(i);:next
460 : print
470 return

请注意,行开头的:只允许我们插入空行的行,或者在行后面缩进;如果您尝试在行的开头添加额外的空格,BASIC编辑器稍后会删除它们。这只会使事物看起来更像现代编程语言。

*有一种方法可以定义带有一个浮点参数并返回一个浮点结果的函数,但是定义必须全部在一行上,并且不能使用任何条件,循环等。它对简单的数学公式有好处。 E.g:

10 def fn f(x)=x*1.5
20 print f(3)

打印&#34; 4.5&#34;