选择法排序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

选择法排序。
程序实现对键盘输入的10个数码进行从大到小的排序,并输出显示`排序的结果。
选择法排序,如果是降序排列,其操作如下:
第一轮排序,第一个单元的数依次与该数后面的每一个比较,大数交换到第一个单元,
比较到最后一个数为止,第一轮排序的结果是使第一个单元中换为最大数。
第二轮排序时,第二个单元的数依次与该数后面的数相比较,大数交换到第二个单元,
比较完最后一个数时,使第二个单元中为次大数。
对于n个数类似地完成n-1轮排序,使n个数从大到小以递减顺序排列。
实现选择法排序需要用二重循环:外循环控制排序轮数,内循环具体实现一轮排序。
data segment
pr db "Input 10 numbers:$" ;输入提示
pr1 db 0ah,0dh,"From max to min:$" ;输出提示
array db 13,0,13 dup("$") ;存入数码的缓冲区
data ends
code segment
assume cs:code,ds:data
main proc far
push ds ;保护程序头首地址
xor ax,ax
push ax
mov ax,data ds←数据段地址
mov ds,ax
lea dx,pr ;显示输入提示信息
mov ah,09h
int 21h
lea dx,array ;用0AH号功能实现输入一串数字
mov ah,0ah
int 21h
lea bx,array+2 ;[bx]指向输入数码的第一个数字
mov cl,array+1 ;cx←输入的数字个数
mov ch,0
lp0: mov si,1 ;lp0为外循环起始地址
push cx ;保存外循环计数器当前值(也是内循环计数器初值)
lp1: mov al,[bx] ;lp1为内循环地址,取一个数字到al
cmp al,[bx+si] ;al中的数码与后面的数码比较
jge next ;al>=[bx+si],跳过交换操作
xchg al,[bx+si] ;al<[bx+si]:交换,大数存入al
mov [bx],al ;大数存入[bx]指向的单元
next:inc si ;位移量加1,[bx+si]指向下一单元
loop lp1 ;循环操作结束后,[bx]所指向的单元较其后单元值都大
inc bx ;[bx]指向下一个字节(大地址方向)
pop cx ;恢复外循计数器当前值
loop lp0 ;外循环结束,排序结束
lea dx,pr1 ;显示输出提示信息
mov ah,09h
int 21h
lea dx,array+2 ;显示排序结果
mov ah,09h
int 21h
ret
main endp
code ends
end main
程序编辑、汇编、连接成功后,生成可执行程序文件ex28.exe,在命令提示符下运行程序:
C:\temp>ex28
Input 10 numbers:3543569821
From max to min:9865543321

相关文档
最新文档