【8086汇编】基础排序之基数排序
来源:互联网 发布:linux怎么打开防火墙 编辑:程序博客网 时间:2024/05/29 07:34
基数排序也叫做“桶子法”,通过数的部分内容,将要排序的数分配到一个个“桶”中,再进行新的串联。最高位有几位,就循环几次,借此达到排序的作用。
简单来举个例子:一个最高位为3为的数序列,把数按照个位顺序组成一个新的序列,再把数按照十位顺序组成一个新的序列,最后再把数按照百位顺序组成一个新的序列,即完成排序。
原理很多地方都有,不再赘述
下面我们照常看一下基数排序的汇编代码
;这个代码只符合对1000以下的10个三位数排序DATAS SEGMENT temp db 100 dup(0) data db 73, 22, 56, 14, 24, 65, 39, 81, 33, 100 order db 10 dup(0) ten db 10DATAS ENDSSTACKS SEGMENT dw 10 dup(0)STACKS ENDSCODES SEGMENT START:main proc farASSUME CS:CODES,DS:DATAS,SS:STACKS MOV AX,DATAS MOV DS,AX mov cx,3;因为最多只有三位数 mov dl,1 mov dh,0;下面用除以dl的方式分别去到个十百的位数 mov di,0;loop1:push cx mov bp,0;bp=i=0getNumber:;第一个循环用于分桶mov al,ds:data[bp]mov ah,0div dlmov ah,0div tenmov al,ahmov ah,0mov si,ax;用si表示lsd(详情去百度基数排序看解释)mov bl,ds:order[si]mov bh,0add ds:order[si],1mov ax,simul tenmov si,axmov al,ds:data[bp]mov ds:temp[si][bx],alinc bpcmp bp,10jb getNumber mov bp,0zuhe:;第二个循环把分好桶的数字重新串联起来mov al,ds:order[bp]cmp al,0jz tonextmov bx,0paixu:mov ax,bpmul tenmov si,axmov al,ds:temp[si][bx]mov ds:data[di],alinc diinc bxcmp bl,ds:order[bp]jb paixumov ds:order[bp],0tonext:inc bpcmp bp,10jb zuhe mov ax,dx mul ten mov dx,ax;用于求下一位数 mov di,0 pop cx loop loop1 MOV AH,4CH INT 21Hmain endpCODES ENDS END START
另外,基数排序是一种不稳定的排序算法,它的复杂度是O (nlog(r) m)
阅读全文
0 0
- 【8086汇编】基础排序之基数排序
- 【8086汇编】基础排序之冒泡排序
- 【8086汇编】基础排序之选择排序
- 【8086汇编】基础排序之希尔排序
- 基础算法之四--排序:之基数排序
- 算法基础之排序篇-基数排序
- 【8086汇编】基础排序之直接插入排序
- 稳定排序之基数排序
- 排序算法之基数排序
- 线性排序之基数排序
- 排序系列之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序之基数排序
- 排序总结之基数排序
- 排序之基数排序
- 排序算法之基数排序
- Java 排序之 基数排序
- ATPG之STIL格式说明
- tf.unpack函数的用法
- USACO-Section1.2 Milking Cows
- java分布式事务(JTA)实现 jotm和atomikos
- Oracle数据库中RMAN默认配置参数代表什么意思
- 【8086汇编】基础排序之基数排序
- Oracle包被锁定的原因分析及解决方案
- nginx memcache 页面缓存
- Can you use map and set???
- 51 Nod 1051 最大子矩阵和 (DP)
- 嵌入式linux+ARM16
- 嵌入式linux+ARM17
- bzoj 1038 [ZJOI2008]瞭望塔
- 关于java中抽象类与接口异同的个人理解(我的第一篇博客)