仅使用 IF 和 GOTO 的冒泡排序
Bubble Sort using only IF and GOTO
所以我想在一维数组上实现冒泡排序,但有一些限制。除了赋值语句和比较之外,我应该只使用 IF
和 GOTO [Label number]
。也就是说,我只能用IF
和GOTO
做循环。通常,我发现使用 GOTO
和 IF
来模拟循环并不难,但是当它是嵌套循环时,我找不到正确的方法。这是我目前的工作,供参考
0 integer i,j,arr_size
1 character*26 arr(1000), tmp
2 i = 1
3 j = 1
4 299 if(i<arr_size) go to 300
5 go to 305
6 300 if(j<arr_size) go to 301
7 go to 304
8 301 if(arr(i) .gt. arr(j)) go to 302
9 go to 303
10 302 tmp = arr(j)
11 arr(j) = arr(i)
12 arr(i) = arr(j)
13 j = j + 1
14 go to 299
15 303 j = j + 1
16 go to 300
17 304 j = 1
18 i = i + 1
19 go to 299
20 305 return
21 end
有什么想法吗?
谢谢!
我认为您的代码更像是一种选择排序形式,而不是真正的冒泡排序。当您的算法在数组的开头写入最小元素时,冒泡排序应该交换相邻元素,
除了已经发现的问题(第 12 行),在第一个循环结束时,最小元素将在位置 1 并且内部循环可以从 j=2 开始。所以第17行可以j=i+1
进行小优化
这是冒泡排序的一个实现。我已经反转测试以减少标签的数量,并且我使用符号标签来获得更清晰的代码。
integer i,j,arr_size
character*26 arr(1000), tmp
i = 1
startouter if(i>=arr_size) go to endouter
j=1
startinner if(j>=arr_size) go to endinner
if(arr(j) .le. arr(j+1)) go to noswap
tmp = arr(j)
arr(j) = arr(j+1)
arr(j+1) = tmp
noswap j = j + 1
go to startinner
endinner i = i + 1
go to startouter
endouter return
end
所以我想在一维数组上实现冒泡排序,但有一些限制。除了赋值语句和比较之外,我应该只使用 IF
和 GOTO [Label number]
。也就是说,我只能用IF
和GOTO
做循环。通常,我发现使用 GOTO
和 IF
来模拟循环并不难,但是当它是嵌套循环时,我找不到正确的方法。这是我目前的工作,供参考
0 integer i,j,arr_size
1 character*26 arr(1000), tmp
2 i = 1
3 j = 1
4 299 if(i<arr_size) go to 300
5 go to 305
6 300 if(j<arr_size) go to 301
7 go to 304
8 301 if(arr(i) .gt. arr(j)) go to 302
9 go to 303
10 302 tmp = arr(j)
11 arr(j) = arr(i)
12 arr(i) = arr(j)
13 j = j + 1
14 go to 299
15 303 j = j + 1
16 go to 300
17 304 j = 1
18 i = i + 1
19 go to 299
20 305 return
21 end
有什么想法吗?
谢谢!
我认为您的代码更像是一种选择排序形式,而不是真正的冒泡排序。当您的算法在数组的开头写入最小元素时,冒泡排序应该交换相邻元素,
除了已经发现的问题(第 12 行),在第一个循环结束时,最小元素将在位置 1 并且内部循环可以从 j=2 开始。所以第17行可以j=i+1
进行小优化
这是冒泡排序的一个实现。我已经反转测试以减少标签的数量,并且我使用符号标签来获得更清晰的代码。
integer i,j,arr_size
character*26 arr(1000), tmp
i = 1
startouter if(i>=arr_size) go to endouter
j=1
startinner if(j>=arr_size) go to endinner
if(arr(j) .le. arr(j+1)) go to noswap
tmp = arr(j)
arr(j) = arr(j+1)
arr(j+1) = tmp
noswap j = j + 1
go to startinner
endinner i = i + 1
go to startouter
endouter return
end