【8086汇编】基础排序之选择排序

来源:互联网 发布:hopscotch编程 编辑:程序博客网 时间:2024/06/06 09:40

选择排序顾名思义是一种“选择”,每次选择最小(大)的数与首位数交换

接下来从第二个数开始对后面的序列继续进行上一步操作,每次都选择最小的数,与之交换

循环操作直到剩下一个数的时候为结束


相关的C语言,java代码相信大家都能找到

今天,我们通过8086汇编语言,看一下这个排序算法

DATAS SEGMENT    ary dw 1,44,3,42,5,52,7,43,9,10    arysize dw 20    position dw 0    table dw 3 dup(?)    temp dw 0DATAS ENDSSTACKS SEGMENT    dw 20 dup(0)STACKS ENDSCODES SEGMENT   START:main proc farASSUME CS:CODES,DS:DATAS,SS:STACKS    MOV AX,DATAS    MOV DS,AX        mov table,offset ary    mov table+2,offset arysize    mov table+4,offset position    mov bx,offset table    call com_pary        MOV AH,4CH    INT 21H    retmain endpcom_pary proc nearpush axpush cxpush sipush dimov si,[bx];数组位置mov di,[bx+2];数组的lengthmov cx,[di];用cx记录循环次数mov di,[bx+4];标志最小值的位置loop1:push cxmov ax,arysizesub ax,cx;让ax=imov bp,ax;bp为光标,指向哪个就对哪个操作mov bx,ds:[si+bp];bx记录最小值mov di,bp;di记录最小值的位置add bp,2;对下一个数操作loop2:cmp ds:[si+bp],bxjnb continue;如果bx较小则不用变mov bx,ds:[si+bp];如果bx较大则更新bx为新的最小值mov di,bp;最小值的位置随之变化continue:add bp,2cmp bp,arysizejbe loop2mov bp,ax;bp为光标,指向哪个就对哪个操作mov ax,ds:[si+bp]mov dx,bx;让dx记录最小值mov bx,di;让bx记录最小值的位置mov ds:[si+bx],ax;最小值与第一个值交换位置mov ds:[si+bp],dxpop cxsub cx,2cmp cx,0ja loop1pop dipop sipop cxpop axretcom_pary endpCODES ENDS    END START


与冒泡排序一样,这也是一个复杂度为O(n^2)的排序算法,可以用来处理规模较小的数据


(如有错误,欢迎指出)