.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)可以在大部分的架构上很有效率地被实现出来。