文档详情

汇编程序设计——排序.pptx

发布:2017-10-28约字共13页下载文档
文本预览下载声明
研究型学习交流 汇编程序设计——排序 通信1103王鑫宇 目录 插入法 冒泡法 选择法 将序列划分成有序序列和无序序列,依次从无序序列中选择数据项值,并且将其插入到有序序列的合适位置。 插入法 2 4 1 无序序列: 有序序列: 4 2 插入法演示 INSERT_SORT PROC NEAR MOV CX,LEN ; 数据个数送CX DEC CX ; 共插入N-1次 XOR SI,SI ;SI清零 ADD SI,2 ;从第二个数开始插入 REPEAT1: MOV AX, ARRAY[SI ] ;将当前的数据保存在AX寄存器中 MOV DX, SI ;用DX记住数据的当前位置 MOV DI,CX ;用DI记住CX MOV CX,LEN ;设置REPEAT2的循环次数,为有序序列长度 SUB CX,DI REPEAT2: CMP AX,ARRAY[SI-2] ;依次比较当前数据和有序序列中数据 JG GOON MOV BX,ARRAY[SI-2] ;若当前数据较小,则将[SI-2]复制到下一位 MOV ARRAY[SI],BX SUB SI,2 LOOP REPEAT2 GOON: MOV ARRAY[SI],AX ADD DX,2 MOV SI,DX ;还原SI和CX MOV CX,DI LOOP REPEAT1 INSERT_SORT ENDP 插入法程序 相邻数据依次比较,若前者大,则交换。 比较的顺序从左边开始向右边进行,在进行一趟比较之后,把最值落在下端。 冒泡法 冒泡流程 开始 CX=N-1 CX→SI BX=0 [BX]=[BX+1] XCHG (BX)+1→BX (CX)-1→CX CX≠0 SI→CX (CX)-1→CX CX≠0 结束 Y N Y Y N N 2 4 1 冒泡法演示 MOV CX,NUM ;计数器赋值 DEC CX LOP1: MOV SI,CX MOV DI,1 ;交换标志位置1 LEA BX,BUF LOP2: MOV AL,[BX] CMP AL,[BX+1] JAE LOP3 ;若前项大于等于后项,则跳到LOP3 XCHG AL,[BX+1] ;若前项比后项小,则交换 MOV [BX],AL MOV DI,0 ;一旦产生交换,则DI置0 LOP3: INC BX LOOP LOP2 CMP DI,0 ;DI为0,则继续排序,否则跳到OK JNZ OK MOV CX,SI LOOP LOP1 OK: MOV BX,0 MOV CX,NUM 冒泡法程序 每一趟排序算法定位到一个最值和无序序列的第一个数交换。 第i趟假设i为最值下标,然后把最值和i+1至最后一个数比较,定位到最值的下标。如果最值下标不为初设值.那么把最值数据项和下标为i的数据项交换。 选择法 2 4 1 选择法演示 CHOOSE_SORT PROC NEAR XOR SI,SI MOV CX,LEN DEC CX ;共比较N-1次 ADD SI,2 REPEAT1: MOV DI,CX ;用DI记住CX MOV DX,SI ;用DX记住数据的当前位置 MOV AX,ARRAY[SI-2] REPEAT2: CMP AX,ARRAY[SI] JL GOON ;若AX小,则比较下一个数 XCHG AX,ARRAY[SI] ;若AX大,则交换, GOON: ADD SI,2 LOOP REPEAT
显示全部
相似文档