主题:[讨论]三个连续存放的正整数按递增次序排序
大吉大利
[专家分:0] 发布于 2006-08-01 23:22:00
BUF DB 8,2,5
:
:
MOV SI,OFFSET BUF
MOV AL,[SI]
CMP AL,[SI+1]
JBE NEXT
XCHG AL,[SI+1]
MOV [SI],AL
NEXT:MOV AL,[SI+1]
CMP AL,[SI+2]
JBE EXIT
XCHG AL,[SI+2]
MOV [SI+1],AL
EXIT:RET
我觉得应该比较3次,但上述程序怎样循环都只有2次,我理解错了吗?
回复列表 (共6个回复)
沙发
boxertony [专家分:23030] 发布于 2006-08-02 09:59:00
你理解得没错。本程序的作者不知是否假定最小的数肯定在前面两个数中,如果是这样的话,确实两次就够了。
板凳
大吉大利 [专家分:0] 发布于 2006-08-02 16:40:00
十分感谢。还是在同一本书上同一个题目:把三个连续存放的正整数按递增次序存放在原来的三个存储单元中。
DATA SEGMENT
INTEGER DB8,3,5
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA SI,INTEGER
MOV CX,2
REPRAT:MOV AL,[SI]
CMP AL,[SI+1]
JB NEXT
XCHG AL,[SI+1]
MOV [SI],AL
NEXT: INC SI
LOOP REPEAT
MOV AH,4CH
INT 21H
CODE ENDS
END START
也是循环两次,是吧?
那末适用所有情况的三个连续存放的正整数的程序应该怎么编?
感谢所有回答者。
3 楼
大吉大利 [专家分:0] 发布于 2006-08-12 17:42:00
大家帮帮忙
4 楼
66543 [专家分:200] 发布于 2006-08-14 00:14:00
呵呵,可以自己去看书或是看下资料嘛,一些常用的排序方法。
5 楼
awfiujff [专家分:110] 发布于 2006-08-17 19:29:00
回答2楼的
是2次循环,但如果最小数在第3个位置(最后面)就不能达到排序目的。
要实现对一般情况下的排序要用到双重循环,外循环和内循环都循环2次(就是冒泡发)。
6 楼
大吉大利 [专家分:0] 发布于 2006-10-23 19:17:00
比较换位法:
LEA BX,DAT
MOV AL,[BX]
CMP AL,[BX+1]
JC NEXT1
XCHG AL,[BX+1]
MOV [BX],AL
NEXT1:CMP AL,[BX+2]
JC NEXT2
XCHG AL,[BX+2]
MOV [BX],AL
NEXT2:INC BX
MOV AL,[BX]
CMP AL,[BX+1]
JC DONE
XCHG AL,[BX+1]
MOV [BX],AL
DONE:HLT
我来回复