最简短且高效的排序程序

来源:互联网 发布:软件企业增值税退税 编辑:程序博客网 时间:2024/04/28 17:11

要求使用 MCS-51 单片机,进行数据排序。

1.对8个数据进行递增排序;
2.需要排序的数据存在内部数据存储器30H-37H地址单元中,分别为 34H,56H,23H,90H,32H,68H,09H,75H;
3.排序后数据存在内部数据存储器30H-37H地址单元中。

悬赏分:20 | 解决时间:2011-9-24 10:06 |

最佳答案:
;-----------------------------------------------------
    ORG   0000H
    MOV   30H,  #34H
    MOV   31H,  #56H
    MOV   32H,  #23H
    MOV   33H,  #90H
    MOV   34H,  #32H
    MOV   35H,  #68H
    MOV   36H,  #09H
    MOV   37H,  #75H
    CALL  SORT
    SJMP  $
;-----------------------------------------------------
SORT:                 ;最简短、高效的排序程序.
    MOV   B,  #7      ;第一轮排序时,比较7次.
S1: MOV   R0, #30H    ;数据区的起始地址.
    CLR   PSW.5       ;清除"交换"标志位.
    MOV   R7, B
S2: MOV   A,  @R0     ;取前一个数.
    INC   R0
    CLR   C
    SUBB  A,  @R0     ;减后一个数,前<后时,Cy=1
S3: JC    S4          ;有借位时,不用交换,转移.
    MOV   A,  @R0     ;取后一个数,准备交换.
    DEC   R0
    XCH   A,  @R0     ;交换到前一个.
    INC   R0
    XCH   A,  @R0     ;交换到后一个.
    SETB  PSW.5       ;设定"交换"标志位.
S4: DJNZ  R7, S2      ;继续本轮比较.
    JNB   PSW.5, ENDS ;如本轮没有进行过交换,可提前结束.
    DJNZ  B,  S1      ;下一轮,比较次数少一次.
ENDS:    RET
;-----------------------------------------------------
END 
;=====================================================
回答时间:2011-9-23 20:27
回答者:做而论道 | 十五级  采纳率:43% 
原题网址:http://zhidao.baidu.com/question/322526862.html
;=====================================================
后记:

这个排序程序,是做而论道经过多年的精心研究编写出来的,在各种书籍、网文中,从没有与此相同的程序。

本程序有如下一些特点:
1.使用了“冒泡法”。
2.可检测序列是否已经排好,具有提前退出循环的能力。
3.程序中使用了寄存器ACC、B、R0、R7,以及PSW,占用硬件资源最少。
4.程序结构简单,运行时,花费的时间最短。
5.文字标注清晰明确,便于理解和修改程序。

修改时,只需改动开始的两行,即可修改参加排序数据的个数和起始地址。
另外,把 S3: JC    S4,改为 JNC,即成为递减排序。

大家可以看看其它类似的排序程序,肯定找不到比做而论道编写的更简单高效的了。
;=====================================================

0 0