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

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

    原文作者:排序算法
    原文地址: https://blog.csdn.net/smzx_boy2012/article/details/40792597
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞