描述:
对数字先用了直接选择排序从小到大进行了排序,然后用冒泡排序逆序从大到小排序,最后输出最大最小
代码:
DATA SEGMENT
STR1 DB 0DH,0AH,'BEFORE SORT$'
STR2 DB 0DH,0AH,'DIRECT SORT L2B$'
STR3 DB 0DH,0AH,'BUBBLE SORT B2L$'
STR4 DB 0DH,0AH,'MIN$'
STR5 DB 0DH,0AH,'MAX$'
SCORE DB 0,3,2,3,5,4,1,7,6,8,9,8,9
COUNT EQU $-SCORE
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1
CALL OUTPUT1
MOV CX,COUNT
MOV BX,OFFSET SCORE
CALL OUTPUT2
MOV CX,COUNT-1 ;直接选择排序开始
MOV SI,OFFSET SCORE
D1:
MOV AL,[SI]
MOV DI,SI
INC DI
MOV BX,CX
D2:
CMP AL,[DI]
JB DNEXT
XCHG AL,[DI]
DNEXT:
INC DI
DEC BX
JNZ D2
MOV [SI],AL
INC SI
LOOP D1
MOV DX,OFFSET STR2
CALL OUTPUT1
MOV CX,COUNT
MOV BX,OFFSET SCORE
CALL OUTPUT2
MOV CX,COUNT-1 ;冒泡排序
B1:
MOV SI,OFFSET SCORE
MOV BX,CX
B2:
MOV AL,[SI]
CMP AL,[SI+1]
JAE BNEXT
XCHG AL,[SI+1]
MOV [SI],AL
BNEXT:
INC SI
DEC BX
JNZ B2
LOOP B1
MOV DX,OFFSET STR3
CALL OUTPUT1
MOV CX,COUNT
MOV BX,OFFSET SCORE
CALL OUTPUT2
MOV DX,OFFSET STR4
CALL OUTPUT1
MOV CX,1
MOV BX,OFFSET SCORE
ADD BX,COUNT
CALL OUTPUT2
MOV DX,OFFSET STR5
CALL OUTPUT1
MOV CX,1
MOV BX,OFFSET SCORE
CALL OUTPUT2
MOV AH,4CH
INT 21H
RET
OUTPUT1 PROC ;输出字符串子过程
MOV AH,9
INT 21H
RET
OUTPUT1 ENDP
OUTPUT2 PROC ;输出数字子过程
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
OP2L1:
MOV DL,[BX]
ADD DL,30H
MOV AH,2
INT 21H
INC BX
MOV DL,20H
MOV AH,2
INT 21H
LOOP OP2L1
MOV AH,3
RET
OUTPUT2 ENDP
CODE ENDS
END START