冒泡法找出数组里最大值和最小值,请高手看一下对不对?

2020-01-16 18:31发布

只需要找出最大值和最小值就可以了,最后的结果是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--;       
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
40条回答
takashiki
1楼-- · 2020-01-22 01:36
wye11083 发表于 2016-11-11 21:19
从来不用stl。经常出现莫名其妙和问题。再一个,这只是个自己用的小工具,用几次而已。
我很少造轮子,另 ...

不是数组或链表的?
自己用的小工具,用几次而已,冒泡冒了4个小时,确实也没啥,睡一觉就完成了。我大学一个教授的同学以前做蒙特卡罗分析,都是下班时打开软件,第二天上午差不多跑出结果出来了
jssd
2楼-- · 2020-01-22 03:25
takashiki 发表于 2016-11-12 07:10
不是数组或链表的?
自己用的小工具,用几次而已,冒泡冒了4个小时,确实也没啥,睡一觉就完成了。我大学 ...

请教:100个数(或者更多)想去头(25%)去尾(25%)做平均滤波(50%),有啥好方法?
takashiki
3楼-- · 2020-01-22 05:05
jssd 发表于 2016-11-14 13:44
请教:100个数(或者更多)想去头(25%)去尾(25%)做平均滤波(50%),有啥好方法?

这个估计得要排序了,约100个数请选用快速排序,普通的递归形式的就可以。
LM1876
4楼-- · 2020-01-22 05:25
               
        if (n_PulseState>6)//7次采样完成
                   {
         for (i=0; i<=7; i++)  //排序
              {
                for (j=0; j<=7-i;j++)//j<5-i 比用 j<=5 少用很多循环
                 {
                  if  (Uin[0][j+1]>Uin[0][j])  //当后一个数大于前一个 数
                   {
                    Tem_data0 = Uin[0][j]; //前后 2 数交换
                    Uin[0][j] = Uin[0][j+1];
                    Uin[0][j+1]  =  Tem_data0;
                    }
                          }
                }
               tmpl=(Uin[0][2]+ Uin[0][3]+ Uin[0][4])/3;//去掉一个最大值和一个最小值,计算平均数?                       
                   Ver=tmpl;//2.48V基准          
                               
               n_PulseState=0;//计算完成,数组位置0
           }
                  


我现在用的

一周热门 更多>