【8086汇编】基础排序之希尔排序

希尔排序是一种特殊的插入排序,是直接插入排序的一个进化版。

这里引入一个增量d的概念,把整个数据分成d份进行排序,然后不断缩小d,最后当d减至1时,数据组成一份,完成排序。

详细读者可以自己去查一下资料,原理网上都有


下面我们照常看一下希尔排序的汇编代码

DATAS SEGMENT
    ary db 2,24,16,21,36,49,14,16,12,33
    count db 10
DATAS ENDS

STACKS SEGMENT
    dw 10 dup(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov al,count
    mov ah,0;ax记录希尔排序中的d
    mov cl,2
    div cl
    mov ah,0
loop1:
	push ax
	
	mov bx,ax;bx记录比较次数
	mov di,ax
loop2:
	mov dl,ds:ary[bx]
	mov ax,bx
	sub ax,di
	mov bp,ax
	cmp dl,ds:ary[bp]
	jnb jmploop2
	
	mov cl,dl;cx记录当前值,相当于N[0]
	mov ch,0
	mov bp,ax
loop3:
	cmp bp,0
	jb tochange
	cmp cl,ds:ary[bp]
	jnb tochange
	
	mov al,ds:ary[bp]
	mov ds:ary[di+bp],al
	
	sub bp,di
	jmp loop3
tochange:

	mov ds:ary[bp+di],cl

jmploop2:
	inc bx
	cmp bl,count
	jb loop2
	
	pop ax
	mov cl,2
	div cl
	mov ah,0
   	cmp ax,0
   	ja loop1
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START



希尔排序是一种非稳定性算法,因为相同的两个数经排序之后,他们的次序可能会发生改变

开头说到希尔排序是直接插入排序的一种进化版,直接插入排序的复杂度是O(n^2)

那么希尔排序的复杂度是多少呢,欢迎大家在评论区留言交流~


(如有错误,欢迎指出)




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值