《编程珠玑》之代码调优

chapter 9 书中的观点:

@1,有些程序员太在乎程序的细小“优化”,以至于难以维护;而另外一些程序员很少关注效率,虽然他们编写的程序有着漂亮清晰的结构,但是效率极低以至没有实际用处。优秀的程序员将效率纳入整体的考虑之中:效率只是软件中的问题之一,但有时候也很重要。

@2,高速缓存原理,什么场景适合使用来提高效率。

@3,能不优化就不要优化。结合工作经验,很大一部分bug,事故,都是改动引发的。不成熟的优化是大量编程灾害的根源,它会危机程序的正确性,功能性,以及可维护性。

附加二分搜索的优化源码:

/*
改进后的二分搜索,若搜索的对象有多个,返回最左边的那个值的位置
*/
int binarySearch2(int arr[],int n,int value)
{
    /*
        这里的思路是,假想的下标 -1 的值表示最小值,下标 n 的值表示最大值。
        初始阶条件 b = -1,e = n;并且有 n >= 0, arr[-1] < value, arr[n] >= value
        终止条件是 b + 1 = e
        搜索条件:b < e, arr[b] < value && arr[e] >= value
        说明:当条件终止时,b + 1 = e,而arr[b]<value, arr[e]>=value。所以e是最终可能的结果。
    */
    assert(n >= 0)
    int b = -1;
    int e = n;
    while((b+1) != e)
    {
        /*conditon: arr[b]<t, arr[e]>=t, b<e*/
        int m = b + (e-b)/2;
        printf("b:%d, m:%d, e:%d\n",b,m,e);
        assert(b < e && m > b && m < e);
        if(arr[m]<t)
            b = m;
        else
            e = m;
    }
    /*final: arr[b]<t, arr[e]>=t*/
    int p = u;
    if(p >= n || arr[p] != value)
        return -1;
    return p;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值