只需要找出最大值和最小值就可以了,最后的结果是a[0]为最小,a[9]为最大,试了几次,没有问题,不知道这种方法行不行的通,看到网上的冒泡法都要循环更多次,给修改了一下。
void testS(void)
{
unsigned char a[10]={240,208,241,98,100,21,187,237,228,21};
unsigned char t=0,j=0;
for(j=0;j<9;j++) //每趟比较j+1次
if(a[j]>a[j+1]) //从左至右依次比较两个相邻的数,将小数放在前面,大数放在后面
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(j=8;j>0;j--) //每趟比较j-1次
if(a[j]<a[j-1]) //从右至左依次比较两个相邻的数,将小数放在前面,大数放在后面
{
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
for(t=0;t<10;t++)
{
DISP_BL(t,a[t]); //送至数码管显示
j=20;
while(j)
{
Delay(200); //延时
j--;
}
}
j=20;
while(j)
{
Delay(200); //延时
j--;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- /*
- u8 minAndmax(u16 *data,u8 lenth,struct MinMax *MinMaxValue)
- 参数1: *data:调用函数的数据指针,u16整型数据
- 参数2: u8 lenth:数据长度
- 参数3: struct MinMax *MinMaxValue:最大值和最小值存储的结构体地址
- 参数4: u8 find_subindex:值为1,返回最大值下标,值为2,返回最小值下标, 其余返回0
- 返回值:返回*data数组最值点的下标(只取位移的,不管载荷的)
- */
- u8 minAndmax(u16 *data,u8 lenth,struct MinMax *MinMaxValue,u8 find_subindex){
- u16 temp_data[250];
- u8 index=0;
- u16 min,max=0;
- u8 sub_index=0;
- for(index=0;index<lenth;index++)
- {
- temp_data[index]=*data++;
- }
- min=temp_data[0];
- max=temp_data[0];
- /*提取最大最小值*/
- for(index=0;index<lenth;index++)
- {
- min=(temp_data[index]<min)?temp_data[index]:min;
- max=(temp_data[index]>max)?temp_data[index]:max;
- }
- MinMaxValue->Min=min;
- MinMaxValue->Max=max;
- if(find_subindex==1)
- {
- for(index=0;index<lenth;index++)
- {
- if(temp_data[index]==max)
- {
- sub_index=index;
- break;
- }
- }
- return sub_index;
- }
- else if(find_subindex==2)
- {
- for(index=0;index<lenth;index++)
- {
- if(temp_data[index]==min)
- {
- sub_index=index;
- break;
- }
- }
- return sub_index;
- }
- else
- return 0;
- }
复制代码一周热门 更多>