【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)

那麼希爾排序的複雜度是多少呢,歡迎大家在評論區留言交流~


(如有錯誤,歡迎指出)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章