8086彙編 基礎排序之直接插入排序

2021-08-01 13:55:47 字數 1283 閱讀 4339

直接插入排序是一種比較簡單的排序。

原理是:

從第二個數開始,依次把每個數當作選定數,在選定數的前面,通過比較大小的方式找到選定數的正確位置,

把該位置之後到選定數之間的數均向後移一位,再通過交換,將選定數放入屬於他的位置中

迴圈上述操作直到對除第一位以外的所有數都操作了一邊,即完成排序。

下面我們來看看相應的彙編**:

datas segment

ary dw 2,48,51,21,36,19,14,16,12,33

count dw 20

datas ends

stacks segment

dw 20 dup(0)

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

mov bx,2;bx記錄操作次數,從第二個數開始操作

beginer:

cmp bx,count

jnb exit;超出比較次數則跳轉

mov ax,ary[bx];用ax記錄當前正在操作的數

cmp ax,ary[bx-2]

jnb tonext;如果該數比前乙個數都大,則不用繼續操作了

cando:

mov di,bx

sub di,2

acj:

cmp ax,ary[di]

jnb chang

mov dx,ary[di]

mov ary[di+2],dx;前面的數依次往後移

sub di,2

cmp di,0

jb chang;di<0,即操作到第乙個數則跳出迴圈

jmp acj;沒找到正確位置,則返回繼續迴圈

chang:;找到該數應放的位置,進行交換

mov ary[di+2],ax;a[j+1]=a[j]

tonext:

add bx,2;第二個數操作完,開始操作下乙個數

jmp beginer

exit:

mov ah,4ch

int 21h

codes ends

end start

從**可以看出,這也是乙個複雜度為o(n^2)的排序演算法,

且因為兩個一樣的數排序之後相對位置不變,所以也是乙個具有穩定性的演算法。

(如有錯誤,歡迎指出)

基礎排序 直接插入排序

插入排序也是一種簡單的排序方法,這裡只介紹直接插入排序。直接插入排序的思想為 在陣列的前端確立乙個0 i的有序序列,將i 1位元素插入之前的有序序列,使得新的0 i 1序列有序,並進行下一步的迭代。對於第一次操作,是將陣列中的第0位作為有序序列,從而進行插入排序操作。所以,n次操作,進行n 1次排序...

排序之直接插入排序

直接插入排序 straight insertion sort 的作法是 每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。具體步驟如下 初始序列 i 1 46 58 15 45 90 18 10 62 i 2 46 58 15 45 90 18 10 62 i 3 15 4...

排序之直接插入排序

1 簡單方法 首先在當前有序區r 1.i 1 中查詢r i 的正確插入位置k 1 k i 1 然後將r k i 1 中的記錄均後移乙個位置,騰出k位置上的空間插入r i 注意 若r i 的關鍵字大於等於r 1 i 1 中所有記錄的關鍵字,則r i 就是插入原位置。2 改進的方法 一種查詢比較操作和記...