社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 656|回复: 2

[原创] 单片机C语言-十种常用算法实例(1)冒泡法排序

[复制链接]

6471

TA的帖子

4955

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

发表于 2018-3-25 23:33:17 | 显示全部楼层 |阅读模式



此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处





简介:

系列文章《常用的10种算法实例》列举了单片机C语言中的十种常用算法:冒泡法;回文法;幂运算;加法运算;求直角三角形变长等,目的是为了使大家熟悉单片机C语言的常用算法。

本例采用冒泡排序算法,将数组中的数据按照从高到底,或者从低到高的顺序排列。

(程序中将数据按升序排序)

一、程序设计


本电路在proteus仿真环境下搭建,可以直接使用。二、硬件电路


  1. /************************************************************
  2. 文件:main.c
  3. 功能:常用的10种算法实例之一冒泡排序算法
  4. 描述:将排序后的数据依次通过LED排序
  5. 作者:老马识途单片机
  6. 日期:2017年12月19日
  7. 编译环境:Keil C51 uVirsion 4.72.9.0
  8. 硬件环境:Proteus 8.0
  9. 主芯片:AT89S51
  10. 晶振:11.0592MHz
  11. ***********************************************************/
  12. #include <reg52.h> //
  13. #include <stdio.h>
  14. //全局变量声明
  15. unsigned char uiBuffer[10]={0x11,0x55,0x88,0x22,0x66,0x99,0x33,0x44,0x77,0x00};
  16. //函数声明
  17. void Delay(unsigned int ucDelayTimer);
  18. void MaoPao(unsigned char uiBufferData[10]);
  19. /*****************************************
  20. 函数名:main()
  21. 入口参数:无
  22. 出口参数:无
  23. 功能:冒泡排序法实例
  24. 说明:通过LED显示排序后的数居
  25. 作者:老马识途单片机
  26. 日期:2017年12月19日
  27. ****************************************/
  28. void main()
  29. {
  30. unsigned char ucCounter;
  31. while(1)
  32. {
  33. //ucCounter = 0;
  34. for(ucCounter=0;ucCounter<10;ucCounter++)
  35. {
  36. //排序后,依次把数组的值赋给P0端口
  37. MaoPao(uiBuffer);
  38. P0 = uiBuffer[ucCounter];
  39. Delay(50000);
  40. }
  41. }
  42. }
  43. /*****************************************
  44. 函数名:Delay()
  45. 入口参数:uiBufferData,待排序的数组
  46. 出口参数:uiBufferData,排序后的数组
  47. 功能:实现数组排序功能,升序排序
  48. 说明:将输入数组的数排序后输出
  49. 作者:老马识途单片机
  50. 日期:2017年12月19日
  51. ****************************************/
  52. void MaoPao(unsigned char uiBufferData[10])
  53. {
  54. int i,j,t;
  55. //外循环控制排序循环次数
  56. for(i=0;i < 10;i++)
  57. {
  58. //内循环控制每次循环比较的次数
  59. for(j=i+1;j < 10;j++)
  60. {
  61. //两个元素比较,逆序则交换
  62. if(uiBufferData[i]<uiBufferData[j])
  63. {
  64. t=uiBufferData[i];
  65. uiBufferData[i]=uiBufferData[j];
  66. uiBufferData[j]=t;
  67. }
  68. }
  69. }
  70. }
  71. /*****************************************
  72. 函数名:Delay()
  73. 入口参数:ucDelayTimer,延时时间长度
  74. 出口参数:无
  75. 功能:实现延时功能
  76. 说明:延时时间可根据入口参数调整
  77. 作者:老马识途单片机
  78. 日期:2017年12月19日
  79. ****************************************/
  80. void Delay(unsigned int ucDelayTimer)
  81. {
  82. for(;ucDelayTimer > 0;ucDelayTimer--);
  83. }
复制代码



二、硬件电路

01.jpg

三、程序装载

02.jpg

四、关键器件参数设置

本电路中主要器件是LED光柱,其电压和电流参数配置如下,需要说明的是,该参数只是能让光柱点亮的值,并不是标准参考值。

03.jpg

五、运行效果

下图是某一时刻程序的执行结果,可以看到对应的LED光柱点亮了。

04.jpg


此帖出自51单片机论坛


回复

使用道具 举报

127

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-3-26 09:44:59 | 显示全部楼层
LZ可以说下这些算法在实际中的应用;


回复

使用道具 举报

1227

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-3-27 09:05:41 | 显示全部楼层
兄弟,又有新知识点了,支持


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-7-16 12:58 , Processed in 0.104342 second(s), 17 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表