优化程序性能

注意在一些循环中可以用到的提升程序性能的方法,并且避免一些不必要的内存访问。

#include<iostream>
using namespace std;

//实现一个功能:更新数组元素,更新值为此位置及前面元素之和。
//方法1
void test01(int *arr,int *sum,int len) {
    sum[0]=arr[0];
    for(int i=1;i<len;i++) {
        sum[i]=sum[i-1]+arr[i];
    }
}
//方法2,减少循环的次数,即充分利用每次循环所具备的资源
void test02(int *arr,int *sum,int len) {
    sum[0]=arr[0];
    //关于跳出边界的判断卡住最坏的情况:i=len-1-1的时候必须跳出来,因为循环中有arr[i+1],不然会越界
    int i;
    for(i=1;i<len-1;i+=2) {
        sum[i]=sum[i-1]+arr[i];
        sum[i+1]=sum[i]+arr[i+1];
    }
    if(i<len)
        sum[i]=sum[i-1]+arr[i];
}

//减少不必要的内存访问
//方法1
void test03(int *arr,int *sum2,int len) {
    for(int i=0;i<len;i++) {
        //这是一个很低效的代码,因为每次循环都要访问内存,而最后只是要一个结果,完全没有必要
        *sum2+=arr[i];//求数组的累积和
    }
}
//方法2
void test04(int *arr,int *sum2,int len) {
    int temp=0;
    for(int i=0;i<len;i++) {
        //用一个临时变量存放每次循环计算结果,省去对内存的访问
        temp+=arr[i];//求数组的累积和
    }
    *sum2=temp;
}
int main()
{
    int arr[5]={1,2,3,4,5};
    int sum[5];
    //test01(arr,sum,5);//1 3 6 10 15 
    test02(arr,sum,5);//1 3 6 10 15 
    //输出数组元素
    // for(int i=0;i<5;i++)
    //     cout<<sum[i]<<" ";
    int sum2=0;
    //test03(arr,&sum2,5);//15
    test04(arr,&sum2,5);//15
    cout<<sum2;
    return 0;
}
上一篇:排序之插入排序


下一篇:Go 语言实现冒泡、选择、插入排序