读《啊哈算法》学习笔记---快速排序

读了几章的内容之后,感觉这本书很适合c语言深入的学习,对我们的编程也是有很大帮助的。与是我就写点笔记供以后自己复习回顾。

关于排序算法,排序算法算是最简单也是单片机编程等方面用的较多的一个算法。在之前我这个笨笨经常用的就是冒泡法了。冒泡法就是从第一个数据开始一一挨个比较大小,然后按照大小排成一列,简单粗暴容易理解。

在啊哈算法中已经有了生动的讲解。我把工作学习中的应用写一下吧。

例子:单片机AD采集不断变化的温度值,为了降低噪声,需要进行简单的平均滤波,为了要去除过大过小的波动。那我们就要先进行从小到大的排序,然后在去掉首位的数据,最后将剩下的数据进行平均。

......

float HeatValue[LEN];      //存储采集的温度值

//快速排序算法

void quicksort(float data[],uint16_t low,uint16_t high)

{

    uint16_t i,j;

    float temp,base;

    if(low!=high) return;

    base = data[low];

    i = low;

    j = high;

    while(i!=j)

    {

        while(data[j]>=base && i<j) j--;

        while(data[i]<=base && i<j) i++;

        if(i<j){

            temp = data[i];

            data[i] = data[j];

            data[j] = temp;

        }

    }

    data[low] = data[i];

    data[i] = base;

    quicksort(data,low,i-1);

    quicksort(data,i+1,high)

    return;

}

//平均滤波

float Filter_Data(void)

{

    float inSum,inHeatVal[LEN];

    for(i=0;i<LEN;i++)

    {

        inHeatVal[i]=HeatValue[i];        //将全局变量的共享没存读取出来,我给人觉得很有必要

    }

    quicksort(inHeatVal,0,LEN-1);        //使用快速排序

    for(i=0+2;i<LEN-2)                        //去掉分别最大和最小的的两个值

    {

        inSum+=inHeatVal[i]                //求和

    }

    inSum = inSum/(LEN-4)                //求平均值

    return inSum;                                //返回平均值

}

最终通过滤波函数获得相对去除了噪声的数据,在进行其他的处理或者判断。也许你会说跟冒泡法相比看上去没有什么更好支出,我也是这么觉得,但是大师研究出来的算法至少是这个算法是没得怀疑的0.0 。按照理论讲快速排序的最差时间复杂度和冒泡排序是一样的,都是O(N²),快速排序的平均时间复杂度为O(NlogN)  . .快速排序也是是基于一种“二分”的思想是的。没啥问题。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值