用汇编语言实现任意输入字符串排序,我主要是采用先分组,然后分别排序,在把两个组合起来排序的使用算法。
在我的输出结果页面中,总共会有6行,第一行表示的是你所输入的我们需要排序的字符串,第二行表示的是将字符串分为两组其中的第一组,第三行表示的是将字符串分为两组其中的第二组,第四行表示的是对分成的第一组排序得到的结果,第五行表示的是对分成的第二组排序得到的结果,第六行表示的是第四行第五行都合起来进行的排序,相当于对第一行进行排序。
具体代码如下:
DATAS SEGMENT
BUF DB 100,?,100 DUP(?),'$'
MES DB 'S $'
A DB 100 DUP(?)
B DB 100 DUP(?)
D DB 100 DUP(?)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV DX,OFFSET BUF
MOV AH,10
INT 21H
MOV BL,BUF+1
MOV AH,2
MOV DL,0AH
INT 21H
MOV AL,BL
MOV AH,0
MOV CL,2
DIV CL
MOV DL,AL
MOV SI,OFFSET BUF+2
MOV AH,0
MOV AL,DL
MOV CX,AX
MOV BX,OFFSET A
MOV DI,CX
MOVSB1:
MOV DX,[SI]
MOV [BX],DX
INC BX
INC SI
DEC CX
CMP CX,0
JNZ MOVSB1
MOV BYTE PTR [BX],'$'
MOV AH,9
MOV DX,OFFSET A
INT 21H
MOV BX,OFFSET B
MOV AH,2
MOV DL,0AH
INT 21H
MOVSB2:
MOV DX,[SI]
MOV [BX],DX
INC SI
INC BX
CMP BYTE PTR [SI],0DH
JNZ MOVSB2
MOV DL,[BX]
INT 21H
MOV BYTE PTR [BX],'$'
MOV AH,9
MOV DX,OFFSET B
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
MOV BX,OFFSET A
MOV SI,OFFSET A+1
MOV CX,SI
PAIA:
MOV DL,[BX]
CMP [SI],DL
JNA DA
INC SI
CMP BYTE PTR [SI],'$'
JZ NEXT
JNZ PAIA
DA:
MOV AL,[SI]
MOV [BX],AL
MOV [SI],DL
INC SI
CMP BYTE PTR [SI],'$'
JZ NEXT
JNZ PAIA
NEXT:
INC BX
MOV SI,CX
INC SI
MOV CX,SI
CMP BYTE PTR [SI],'$'
JNZ PAIA
MOV AH,9
MOV DX,OFFSET A
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
MOV BX,OFFSET B
MOV SI,OFFSET B+1
MOV CX,SI
PAIB:
MOV DL,[BX]
CMP [SI],DL
JNA DAB
INC SI
CMP BYTE PTR [SI],'$'
JZ NEXT1
JNZ PAIB
DAB:
MOV AL,[SI]
MOV [BX],AL
MOV [SI],DL
INC SI
CMP BYTE PTR [SI],'$'
JZ NEXT1
JNZ PAIB
NEXT1:
INC BX
MOV SI,CX
INC SI
MOV CX,SI
CMP BYTE PTR [SI],'$'
JNZ PAIB
MOV AH,9
MOV DX,OFFSET B
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
MOV BX,OFFSET A
MOV SI,OFFSET B
MOV DI,OFFSET D
PAID:
MOV AL,[BX]
CMP AL,[SI]
JNA DIYIGE
DIERGE:
MOV AL,[SI]
MOV [DI],AL
INC DI
INC SI
CMP BYTE PTR [SI],'$'
JZ JIESHU2
JNZ PAID
DIYIGE:
MOV [DI],AL
INC DI
INC BX
CMP BYTE PTR [BX],'$'
JZ JIESHU1
JNZ PAID
JIESHU1:
MOV AL,[SI]
MOV [DI],AL
INC DI
INC SI
CMP BYTE PTR [SI],'$'
JZ JIESHU
JNZ JIESHU1
JIESHU2:
MOV AL,[BX]
MOV [DI],AL
INC DI
INC BX
CMP BYTE PTR [BX],'$'
JZ JIESHU
JNZ JIESHU2
JIESHU:
MOV BYTE PTR [DI],'$'
MOV AH,9
MOV DX,OFFSET D
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
好啦,具体代码就是这样子,因为我的代码可能没有注释,大家看得话会比较麻烦且枯燥,所以如果有什么不懂的地方,欢迎私信。
我之前发的那个字符串排序只能针对指定的字符串,而且算法也比较笨,相比于那个,这个算法更加灵敏,轻巧。但代码相比而言也会更多。