导航:首页 > 操作系统 > 单片机中排序的方法有哪些

单片机中排序的方法有哪些

发布时间:2024-01-24 03:03:43

❶ C51单片机“冒泡法”排序实例

用keil调试下,就可以知道结果了。
感觉楼主的分析是正确的……
只是不清楚这个程序段的意图是对数组a[]的全部数据进行排序还是仅对其前9个数据排序。
printf("the unsorted numbers:\n");
for(i=0;i<9;i++)
printf("%bx",a[i]);
printf("\n");

printf("the sorted number:\n");
for(i=0;i<=10;i++)
printf("%bx",a[i]);
按常理,这两段应该是对应的,判断条件下面的那个更合理,按分析前面那段只打印未排序前的a[0]~a[8];后面那段却将11个数全部打印出来了。 (实际还应以调试结果为准)

❷ 单片机排序程序

MOV R5,#16
MOV R6,#40H
LONG:
MOV R4,#15;16个数比较15次
MOV A,30H;将30H里面的内容复给A
MOV R0,#31H;让其从31H开始自加到3FH
L:
SUBB A,@R0;31H里面的内容和30H里面的内容进行相减比较求C
JC XU;如果C=0则表示A里面的内容大于@R0里面的内容否则小于跳转XU
INC R0;R0加1到下一单元地址
DJNZ R4,L;15次比较没有结束跳转到L继续执行
AJMP LL;如果15次循环完毕则求出最大值,然后再循环求出次大值
XU:
MOV A,R0;放比较数的地址送A,以清零方便为第二次比较
MOV R1,A;方便清零
MOV A,@R0;最大值送A
INC R0
AJMP LL
LL:
MOV @R1,#00H;最大值地址清零,然后再比较15次求次大值
MOV R6,A;最大值送40H
INC R6
DJNZ R5,LONG;判断是否全部从大到小排完
AJMP TT
TT:
END

❸ 单片机实验数据排序

原发布者:瀚海湛蓝
实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H;设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A;数据指针传送到R0MOVR7,#0AH;长度送到R7CLR00H;清零标志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC;清零进位标志MOV22H,@R0CJNEA,22H,DORDE3;是否相等SETBCDORDE3:MOVA,R2JCDORDE4;小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0;大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1;未完继续MOVR0,#7EH;完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH

❹ 使用单片机汇编语言冒泡法排序

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

Size equ 10 ; 数据个数
Array equ 50h ; 数据起始地址
Change equ 0 ; 交换标志

Sort:
mov r0, #Array
mov r7, #Size-1
clr Change
Goon:
mov a, @r0
mov r2, a
inc r0

mov B, @r0
cjne a, B, NotEqual
sjmp Next
NotEqual:
jc Next ; 前小后大, 不交换

setb Change ; 前大后小, 置交换标志
xch a, @r0 ; 交换
dec r0
xch a, @r0
inc r0
Next:
djnz r7, Goon
jb Change, Sort
ljmp $

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 ;调整比较次数
MOV R7, A
CLR F0 ; 清交换标志

L2: ;比较
MOV A, @R0 ; 取前一个数启知
INC R0
MOV B, @R0 ; 取后一个数
CJNE A, B, L3 ; 前面的数 与 后面的数 比较, 前-后

L3: ;判断、处理
JC N_JH ; 后面的伏薯数 大于 前面的数,不交换
XCH A,B ; 否则前后两数交换存放
MOV @R0,缺旁者A
DEC R0
MOV @R0,B
INC R0
SETB F0 ; 设交换标志

N_JH:
DJNZ R7, L2 ; 没有比较完,就继续
JNB F0, L_END ; 没有交换过,就结束
DJNZ R6, L1

L_END:
RET ; 排序完成。

;结果是:
;40H中存放着最小的数;
;4FH中存放着最大的数。

❻ 51单片机汇编 排序问题 请各位赐教

单片机排序问题,可以参考:
http://..com/question/148407042.html
试设计一个子程序,其功能为将(RO)指出的内部RAM中6个单字节正整数按从小到大的次序重新排列。

仿真测试通过.

ORG 0000H

MOV 40H, #8AH
MOV 41H, #3BH
MOV 42H, #0B9H
MOV 43H, #47H
MOV 44H, #29H
MOV 45H, #0AFH

CALL SORT6 ;调用排序子程序
NOP
NOP
SJMP $
;-------------------------------------
SORT6: ;排序子程序
MOV R6, #5
S1:
MOV B, R6
MOV R7, B
MOV R0, #40H ;起始地址
S2:
MOV B, @R0
INC R0
MOV A, @R0
CJNE A, B, S3
S3:
JNC N_JH
MOV @R0, B
DEC R0
MOV @R0, A
INC R0
N_JH:
DJNZ R7, S2
DJNZ R6, S1
RET
;-------------------------------------
END

三字节的加法,在我的空间,也有。
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0

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

懂的人很多的...
就和C语言的是一个道理..
冒泡排序是很费时的...每一次只冒一个..
虽说可能用不了,N-1次,但在某些组合的情况下是会用到那么多次..
这也是为了完全排出大小...

❽ 单片机io口怎么排序呢

这里的PIO口都是个一字节的寄存器,芯片内部规定P2.0为最低位,P2.7为最高位;
而数据的表示方式按约定是高位在左低位在右的排序,所以有你看到的1111 1110的顺序;
而当数据按位进行串行传输,同时先传低位时,就有你想看到的0111 1111 的顺序了;

❾ 编写简单的单片机c语言程序 1、指定数组找最大值 2、排序

#include<stdio.h>

#defineNR10//数组元素个数

/*从主函数开始*/

intmain(intargc,char**argv)

{

intar[NR];

inti;

fprintf(stdout,"请输入%d个整数: ",NR);

/*获取并检查用户输入*/

while(1)

{

/*循环获取NR个数据*/

for(i=0;i<NR;i++)

{

if(fscanf(stdin,"%d",&ar[i])!=1)

{

fprintf(stdout,"输入错误!请重新输入: ");

while(getchar()!=' ');//丢弃多余非法字符

break;//打破内层for循环

}

}

/*检查是否获取到NR个数据*/

if(i!=NR)

{

continue;

}

else

{

break;

}

}

/*查找最大值和最小值*/

intmax,min;

max=ar[0];//假定第一个数为最大值

min=ar[0];//同时假定也第一个数为最大值

/*从第二个数开始比较查找最值*/

for(i=1;i<NR;i++)

{

if(ar[i]>max)//最大值

{

max=ar[i];

}

if(ar[i]<min)//最小值,不能使用elseif,否则会跳过比较

{

min=ar[i];

}

}

fprintf(stdout,"最大值为:%d最小值为:%d ",max,min);

/*接下来:查找第二大值*/

intsecond;

/*先获取前两个数的第一大和第二大值*/

ar[0]>ar[1]?(max=ar[0],second=ar[1]):

(max=ar[1],second=ar[0]);

/*从第2个数开始比较查找*/

for(i=2;i<NR;i++)

{

if(ar[i]>max)//查找最大值:目的是为了比较第二大值

{

second=max;//先把最大值保存给第二大值

max=ar[i];

}

elseif(second<ar[i])//比最大值小的数再看看是否大于第二大值

{

second=ar[i];

}

}

fprintf(stdout,"第二大值为:%d ",second);

return0;

}

(9)单片机中排序的方法有哪些扩展阅读

一、c语言程序求数组内所有数的和:

1、通过索引的方式就可以访问到数组内部的元素,索引是从0到数组长度-1。

2、数组点Lenth就是数组的长度。

二、c语言程序冒泡排序:

1、比较相邻的两个元素的大小,如果第一个比第二个大就互换一下。

2、然后每一对都做如上操作,如此一来最后一个元素肯定是最大的数了。

3、除了最后一个元素,重复以上步骤。然后倒数第二个就是次大的值了

4、一次按照这个逻辑直到没有任何数字可以比较了。

阅读全文

与单片机中排序的方法有哪些相关的资料

热点内容
卫星锅加密卡那里收购 浏览:56
小米工具文件夹选项在哪里 浏览:53
md5磁盘加密 浏览:640
单片机x地址 浏览:208
回车键失灵运行命令如何使用 浏览:984
电脑一键解压缩的软件 浏览:171
怎么关闭手机通讯录对外app 浏览:370
我的世界如何强行进入一个满人的服务器 浏览:653
什么app可以查询会考成绩 浏览:389
程序员能创造的价值 浏览:259
服务器上的redis是什么意思 浏览:379
软件产品经理与程序员 浏览:922
高中生程序员 浏览:892
ps处理pdf 浏览:723
服务器c1什么意思 浏览:222
哈尔滨手机什么app拍违章有奖励 浏览:479
盗贼用什么app最好 浏览:904
51单片机如何测量电导率 浏览:501
移动花卡怎么使用app流量 浏览:556
个税算法2021表格公式解读 浏览:176