1. 程式人生 > >【8086彙編】基礎排序之氣泡排序

【8086彙編】基礎排序之氣泡排序

氣泡排序是一種極為基礎的排序演算法,相信學過C語言、JAVA等程式語言的同學對此都有所瞭解。

氣泡排序的原理是將陣列中的前後兩個數兩兩比較,小的在前大的在後(你也可以反過來),一次迴圈過後,最大的數到了末尾。

接下來是排除最後那個最大的數,對前面的數繼續進行上述操作。

重複操作,直到剩下最後一個數

今天我們通過8086組合語言,來看一下這個排序演算法。

DATAS SEGMENT
    a dw 19,15,13,14,18,62,14,42,35,68
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 cx,10
	dec cx;為了設定n-1
loop1:
	push cx
	mov bx,0
loop2:
	mov ax,a[bx]
	cmp ax,a[bx+2];兩數比較,小於等於的不變,大於則交換位置
	jle continue
	xchg ax,a[bx+2]
	mov a[bx],ax


continue:
	add bx,2;因為是字,所以加2實現進行下一個
	loop loop2
	pop cx
	loop loop1
	
	MOV AH,4CH
   	INT 21H
CODES ENDS
    END START

從程式碼顯而易見,氣泡排序的操作複雜度為 O(n^2),這對處理小規模資料比較簡便,但一旦處理大規模資料,相應的時間代價就非常高。

另一方面,氣泡排序是一種穩定的排序演算法,比起不穩定的選擇排序、快速排序,當你對穩定性有要求時,不妨選擇氣泡排序。