加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c51单片机100个数从小到小大排序问题

(2009-01-09 15:08:25)
标签:

c51

杂谈

分类: VC++

当然是可变的  
  你把排序的数据放到片外RAM就可以  
  然后在片内RAM开辟一个临时空间排序Top

13 楼flowercity(菜农)回复于 2004-07-01 20:34:40 得分 0

不给分?  
  郁闷  
  下次我就罢工了  
你用的是C51啊?  
  就是C语言了  
  很容易的  
  如果要汇编的,我也可以给你写出来  
  下面是C语言的,就是排序啊!  
  //冒泡排序                     验证过  
  void   MpSort(int   a[],int   len,int   flag)  
  {  
  int   i,j,t=0;  
      for(i=0;i<len-1;i++)  
          for(j=0;j<len-i-1;j++)  
          {  
              if(flag==0)  
  {  
  if(a[j]>a[j+1])  
  {  
  t=a[j];  
  a[j]=a[j+1];  
  a[j+1]=t;  
  }  
  }  
              else  
  {  
  if(a[j]<a[j+1])  
  {  
  t=a[j];  
  a[j]=a[j+1];  
  a[j+1]=t;  
  }  
  }  
              }  
  }  
   
  //查找排序       验证过  
  void   FindSort(int   a[],int   len,int   flag)  
  {  
  int   i,j,t;  
      for(i=0;i<len;i++)  
          for(j=i+1;j<len;j++)  
          {  
              if(flag==0)  
  {  
  if(a[i]>a[j])  
  {  
  t=a[i];  
  a[i]=a[j];  
  a[j]=t;  
  }  
  }  
              else  
  {  
  if(a[i]<a[j])  
  {  
  t=a[i];  
  a[i]=a[j];  
  a[j]=t;  
  }  
  }  
  }  
  }  
   
  //快速排序  
  void   QuickSort(int   a[],   int   left,   int   right)  
  {  
  int   mid,   mid1,   l,   r,   temp;  
  l=left;  
  r=right;  
  mid1=(left   +   right)/2;  
  mid=a[mid1];  
   
  while(l<r)  
  {  
  while(a[l]   <   mid)  
        ++l;  
  while(a[r]   >   mid)  
        --r;  
   
  if(l>r)  
  break;  
   
  temp   =   a[l];  
  a[l]   =   a[r];  
  a[r]   =   temp;  
   
  if(l!=   mid1)  
        --r;  
  if(r   !=   mid1)  
        ++l;  
  }  
   
  if(l   ==   r)  
        l++;  
  if(left   <   r)  
        qsort(a,   left,   l-1);  
  if(l   <   right)  
        qsort(a,   r+1,   right);      
  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有