直接插入排序是一種比較簡單的排序。
原理是:
從第二個數開始,依次把每個數當作選定數,在選定數的前面,通過比較大小的方式找到選定數的正確位置,
把該位置之後到選定數之間的數均向後移一位,再通過交換,將選定數放入屬於他的位置中
迴圈上述操作直到對除第一位以外的所有數都操作了一邊,即完成排序。
下面我們來看看相應的彙編**:
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 改進的方法 一種查詢比較操作和記...