回复:有求万泉河

yanxiao

版主

  • 帖子

    12143
  • 精华

    46
  • 被关注

    183

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2002-05-25 23:47:09

0楼

不应直接要求给程序,应寻求方法才对。
对于数目不多的数排序,可采用“冒泡法”或沉底法。依次对相邻的两个数比较,使较大或较小的数往一个方向移动,一遍比较下来,必有一个最大或最小值产生,再对余下的数作同样的比较,产生次最大或次最小,如此循环直到 只剩一个数,排序结束。

比如你的问题:
4个要比较的数已存至AC0-AC3中。

// 第一遍比较
LDW< AC0,AC1
MOVW AC0,#TEMP
MOVW AC1,AC0
MOVW #TEMP,AC1 // 交换两数,使较小的数往后移动
LDW< AC1,AC2
MOVW AC1,#TEMP
MOVW AC2,AC1
MOVW #TEMP,AC2 // 交换两数,使较小的数继续往后移动
LDW< AC2,AC3
MOVW AC2,#TEMP
MOVW AC3,AC2
MOVW #TEMP,AC3 // 交换两数,AC3中已为最小数

// 第二遍比较,因AC3中已为最小数,不再参加比较
LDW< AC0,AC1
MOVW AC0,#TEMP
MOVW AC1,AC0
MOVW #TEMP,AC1 // 交换两数,使较小的数往后移动
LDW< AC1,AC2
MOVW AC1,#TEMP
MOVW AC2,AC1
MOVW #TEMP,AC2 // 交换两数,AC2中为次最小数

// 第三遍比较
LDW< AC0,AC1
MOVW AC0,#TEMP
MOVW AC1,AC0
MOVW #TEMP,AC1 // 交换两数,使较小的数往后移动

// 只剩AC0,排序结束。

这个过程可以用循环和指针的方式来做,可以减少代码数,但会占用较多CPU时间。在指令空间不紧张的话,不要用循环。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。