有谁懂单片机的冒泡法排序吗?

一批单字节无符号数,以R0为首地址指针,R2中为字节数,将这批数进行升序排列.
SORT: MOV A,R0 ;
MOV R1,A ;(R1)为首地址
MOV A,R2 ;字节数送入R5
MOV R5,A ;(R5)为字节数
CLR F0 ;互换标志位F0清零
DEC R5 ;循环n-1
MOV A,@R1 ;
LOOP: MOV R3,A ;(R3)为前一个数
INC R1 ;地址指向下一个数
CLR C ;
MOV A,@R1 ;取下一个数
SUBB A,R3 ;比较大小
JNC LOOP1 ;如果进位位Cy=0,则转移
SETB F0 ;互换标志位F0置1
MOV A,R3 ;前面大的数放到A
XCH A,@R1 ;互换后,小的数在A,大数在@R1
DEC R1 ;(R1)指向前一个地址
XCH A,@R1 ;小的数放到前一个地址
INC R1 ; (R1)指向下一个地址
LOOP1: MOV A,@R1 ;取下一个数
DJNZ R5,LOOP
JB F0,SORT 如果直接寻址位=1,则转移
RET

关于这个程序还有很多不懂的地方啊,有谁能仔细分析一下吗?
DJNZ R5,LOOP这句不是说明要执行循环n-1次吗?但是事实上可能不用n-1次排序就已经结束了啊??

懂的人很多的...
就和C语言的是一个道理..
冒泡排序是很费时的...每一次只冒一个..
虽说可能用不了,N-1次,但在某些组合的情况下是会用到那么多次..
这也是为了完全排出大小...
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-08-02
需要n-1次,假如有十个数的话,循环第一遍将最小的放在第一位上,第二遍将次小的放第二位上。。。。九遍时将倒数第二小的数放在第九位上,才完成了排序。

单片机冒泡法问题高分求助!
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶...

使用单片机汇编语言冒泡法排序
1.了解数据排序的简单算法。2.了解数列的有序和无序概念 三、实验说明 有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的 数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在 数列的最后面。再进行下一轮比较,找出第二大数据,直到全部...

单片机的算法有哪些?
1、冒泡排序算法 将一串数据使用冒泡法进行排序。将排序后的数据按照从大到小或者从小到大的顺序在LCD液晶上显示出来。2、回文算法 检测字符串是否是回文字符串,如果是回文字符串,则点亮LED,如果不是,则蜂鸣器响一下。3、幂运算 程序中随意定义一个无符号整型数据N,然后计算出1*2*3*4*...*N...

C51单片机“冒泡法”排序实例
打印那里是肯定有问题的,用winTC调了下,结果如图,打印出来的unsorted numbers为9个 本回答由提问者推荐 举报| 答案纠错 | 评论 2 0 zhang_yi_cheng 采纳率:67% 擅长: 汇编语言 其他编程语言 操作系统\/系统故障 网站使用 Linux 为您推荐: 单片机冒泡c语言 单片机冒泡法思想 冒泡法排序c语言 单片机实现冒...

单片机的冒泡排序时总是出现error 65:access violation的错误,请 ...
jb 10h,main 执行到这句如果条件不成立没跳转到main,,那么顺序执行程序地址不明确 改为 jb 10h,main ajmp end 或者 jb 10h,main ajmp 标号 end 或者 ajmp,main end

51单片机汇编语言-请编写程序将内部RAM 40H到4FH 中的16个数据按从小...
冒泡排序程序如下:ORG 0000H LCALL SORT ; 跳转到排序程序 SJMP $ ; 。SORT: ; 数据冒泡排序程序 MOV R6, #16 ;参加排序数据的总个数 DEC R6 ; 比较次数 比 数据总数 少 1 L1:MOV R0, #40H ; 把数据的起始地址40h付给R0 MOV A, R6 ...

汇编语言用“冒泡法”排序
汇编语言用“冒泡法”排序 30 采用“冒泡法”把一个长度已知的数组元素按从大到小排序Array db 56h,23h,37h,78h,0ffh,0,12h,99h,64h,0b0hDb 78h,80h,23h,1,2,0fh,2ah,46h,32h,42h 鬼风疙瘩上 | 浏览3268 次 |举报 我有更好的答案...

单片机的冒泡排序时总是出现error 65:access violation的错误,请 ...
jb 10h,main 执行到这句如果条件不成立没跳转到main,,那么顺序执行程序地址不明确 改为 jb 10h,main ajmp end 或者 jb 10h,main ajmp 标号 end 或者 ajmp,main end

如何用单片机控制寻找最大数
循环 判断后一个数比前一个数大 就用后一个数代替当前的数 最后这个当前数 就是最大的数 uchar data_buf[10]uchar most = 0;for(i=0;i<10;i++){ if(most<data_buf[i]){ most = data_buf[i];} } 最后MOST就是最大的数 ...

单片机C语言程序设计题
这是两个题啊。哈哈好做,第一个有C语言的冒泡法排序,第二个用中断,读,输出就可以

相似回答