簡體   English   中英

從五個數字中最小到最大排序

[英]Sorting least to greatest of five numbers

我需要從最小到最大對五個數字進行排序。

我一直在為這個小人電腦模擬器的任務而苦苦掙扎。 我嘗試添加更多循環來添加 2 個輸入數字,但它從未奏效。

3個數字的工作分揀機:

         INP        // Read in the first value
         STA 91     // store it
         INP        // Read in the second value
         STA 92     // store it
         INP        // Read in the third value
         STA 93     // store it
         LDA 92     // LOOP 1, STEP 1:  
         SUB 91     // 
         BRP STEP2  // if r91 and r92 are in order, don't swap them
         LDA 92     // Begin swapping registers
         STA 99     // temp = r92
         LDA 91
         STA 92     // r92 = r91
         LDA 99
         STA 91     // r91 = temp
STEP2    LDA 93     // LOOP 1, STEP 2
         SUB 92
         BRP STEP3  // If r92 and r93 are in order, don't swap them
         LDA 93     // Begin swapping registers
         STA 99     // temp = r93
         LDA 92
         STA 93     // r93 = r92
         LDA 99
         STA 92     // r92 = temp
STEP3    LDA 92     // LOOP 2, STEP 1
         SUB 91
         BRP STEP4  // if r91 and r92 are in order, don't swap them
         LDA 92     // Begin swapping registers
         STA 99     // temp = r92
         LDA 91
         STA 92     // r92 = r91
         LDA 99
         STO 91     // r91 = temp
STEP4    LDA 91     // Write out the sorted values 
         OUT
         LDA 92
         OUT
         LDA 93
         OUT
         HLT        // stop

現有代碼具有三個用於比較和潛在交換的步驟。 第一步比較前兩個值,第二步比較后兩個值,第三步和第一步一樣:再次比較前兩個值。

當您輸入 5 個值時,您需要一個循環,否則您無法在可用的 100 個郵箱中進行所有必要的比較。 為此,您可以使用冒泡排序之類的算法,該算法還比較相鄰的值對:

  • 第 1 步:比較值 1 和 2
  • 第 2 步:比較值 2 和 3
  • 第 3 步:比較值 3 和 4
  • 第 4 步:比較值 4 和 5

每個步驟的代碼就像您已經擁有它一樣,除了您還將記下是否執行了交換。 這表明上述所有步驟都需要再次重復。

你所包含的代碼沒有使用標簽,確實很遺憾注釋需要給數字命名,而大多數LMC模擬器都支持標簽。

以下是它的工作原理:

 #input: 5 3 4 2 1 INP STA NUM1 INP STA NUM2 INP STA NUM3 INP STA NUM4 INP STA NUM5 BEGIN LDA ZERO STA DIRTY LDA NUM2 SUB NUM1 BRP STEP2 LDA ONE STA DIRTY LDA NUM1 STA TEMP LDA NUM2 STA NUM1 LDA TEMP STA NUM2 STEP2 LDA NUM3 SUB NUM2 BRP STEP3 LDA ONE STA DIRTY LDA NUM2 STA TEMP LDA NUM3 STA NUM2 LDA TEMP STA NUM3 STEP3 LDA NUM4 SUB NUM3 BRP STEP4 LDA ONE STA DIRTY LDA NUM3 STA TEMP LDA NUM4 STA NUM3 LDA TEMP STA NUM4 STEP4 LDA NUM5 SUB NUM4 BRP CHECK LDA ONE STA DIRTY LDA NUM4 STA TEMP LDA NUM5 STA NUM4 LDA TEMP STA NUM5 CHECK LDA DIRTY BRZ OUTPUT BRA BEGIN OUTPUT LDA NUM1 OUT LDA NUM2 OUT LDA NUM3 OUT LDA NUM4 OUT LDA NUM5 OUT HLT NUM1 DAT NUM2 DAT NUM3 DAT NUM4 DAT NUM5 DAT DIRTY DAT TEMP DAT ONE DAT 001 ZERO DAT 000 <script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.816/lmc.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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