【8086彙編】基礎排序之氣泡排序
阿新 • • 發佈:2019-01-29
氣泡排序是一種極為基礎的排序演算法,相信學過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),這對處理小規模資料比較簡便,但一旦處理大規模資料,相應的時間代價就非常高。
另一方面,氣泡排序是一種穩定的排序演算法,比起不穩定的選擇排序、快速排序,當你對穩定性有要求時,不妨選擇氣泡排序。