[英]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
有任何想法嗎?
謝謝!
我認為您的代碼比真正的冒泡排序更像是一種選擇排序。 當您的算法在數組的開頭寫入min元素時,冒泡排序應該交換相鄰的元素,
除了已經發現的問題(第12行)之外,在第一個循環的末尾,min元素將位於位置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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.