8086汇编语言实现快速排序算法

时间:2021-12-07 01:19:55
.model small
.stack
.data
array db 12,45,13,9,45,48,68,32,5,11
count equ $-array
.code
.startup
mov ax,count
sub ax,1
xor dx,dx
mov bx,offset array
call qsort
mov cx,count
again:
xor ax,ax 
mov al,byte ptr[bx]
call input
inc bx
loop again
mov ah,4ch
int 21h


qsort proc near
cmp dx,ax
jge exit
call partion
push ax
push cx
sub cx,1
mov ax,cx
call qsort
pop cx
pop ax 
add cx,1
mov dx,cx 
call qsort 
exit:
ret
qsort endp


partion proc near
push ax
push dx
mov si,dx 
mov di,ax
mov dl,byte ptr[bx][si]
mov dh,byte ptr[bx][di]
call swap 
sub ax,si 
mov cx,ax
mov di,si
mov al,dh 
next:
mov dl,byte ptr[bx][si]
cmp dl,al 
jae sign
mov dh,byte ptr[bx][di]
call swap 
inc di
sign:
inc si 
loop next
mov dh,byte ptr[bx][di]
mov dl,al
call swap 
mov cx,di 
pop dx
pop ax 
ret 
partion endp


swap proc near
xchg dl,dh
mov byte ptr[bx][si],dl 
mov byte ptr[bx][di],dh 
ret
swap endp


input proc near
mov dl,10
div dl
mov dx,ax
add dx,3030h
cmp dl,30h
je next1
mov ah,2 
int 21h
next1:
mov dl,dh
mov ah,2
int 21h
mov dl,20h
int 21h
ret 
input endp

END

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。