【8086汇编】基础排序之直接插入排序

来源:互联网 发布:网络诈骗案一般关多久 编辑:程序博客网 时间:2024/06/02 06:13

直接插入排序是一种比较简单的排序。


原理是:

从第二个数开始,依次把每个数当作选定数,在选定数的前面,通过比较大小的方式找到选定数的正确位置,

把该位置之后到选定数之间的数均向后移一位,再通过交换,将选定数放入属于他的位置中

循环上述操作直到对除第一位以外的所有数都操作了一边,即完成排序。


下面我们来看看相应的汇编代码:

DATAS SEGMENT    ary dw 2,48,51,21,36,19,14,16,12,33    count dw 20DATAS ENDSSTACKS SEGMENT    dw 20 dup(0)STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    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,2acj:    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 21HCODES ENDS    END START

从代码可以看出,这也是一个复杂度为O(n^2)的排序算法,

且因为两个一样的数排序之后相对位置不变,所以也是一个具有稳定性的算法。


(如有错误,欢迎指出)

原创粉丝点击