管理员
主题
回帖0
积分34960
阅读权限200
注册时间2008-11-13
最后登录1970-1-1
在线时间 小时
|
我没有ICCAVR,没调试过,大概弄了一个,应该是下面这样:
void bubble(uint *a,uint n) //冒泡排序函数,参数a是数组首地址,n是要排序数组的元素个数
{ uint i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a>a[j]) { temp=a; a=a[j]; a[j]=temp; }
}
void main()
{
uint data,ad[10],a[4],i;
// uint ad,ad0,ad1,ad2,ad3,ad4,ad5,ad6,ad7,ad8,ad9;
init_LCD(); //初始化LCD
while(1)
{
for(i=0;i<10;i++)
{
ad=m16_ad(); //读取10次AD值
delay(2);)
}
bubble(&ad, 10); //10个AD值进行冒泡排序
data=0; //每次使用前要记得清零
for(i=1;i<9;i++) //排序后最大和最小值放在数组的头和尾,只要将中间的8个求平均就行
data=data+ad; //读取的8次AD值相加
data>>3; //求得的和右移3位就是相当于除以8
data=data/10/2.048/2; //数据换算
}
以上程序只是作为冒泡排序的一个例子,如果你程序要处理的事情比较多,不能接受冒泡的时间复杂度,可以考虑使用快速排序法,或者更简单一点,只用一重循环,将最大值和最小值查出来,然后对10个数求和,再减去最大值和最小值,结果和对排序后的中间8个数求和一样的,这样时间复杂度上小很多。 |
|