簡體   English   中英

氣泡排序僅使用IF和GOTO

[英]Bubble Sort using only IF and GOTO

所以我想在一維數組上實現冒泡排序,但有一些限制。 除了賦值語句和比較之外,我只應使用IFGOTO [Label number] 換句話說,我只能使用IFGOTO進行循環。 通常,我並不覺得很難使用GOTOIF來模擬循環,但是當它是嵌套循環時,我找不到正確的方法。 這是我到目前為止的工作,以供參考

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM