两个if和if-else(《编程珠玑(续)》第1章)

来源:互联网 发布:百度竞价排名 seo 编辑:程序博客网 时间:2024/06/11 23:59

对于下面程序,原来是两个if语句,为了减少比较次数,改成了if-else语句,并且测试了其效果。

第2个数比max大的概率为1/2,第n个数比max大的概率为1/n,即相当于在n个位置上,把最大的数放到了第n个位置,这个概率显然是1/n。因此比较减少的数目为Hn=1+1/2+1/3+~+1/N=lnN。当N=10^9时,这个数也才是20,因此根本没有想象中的那么高的效率。

#include<iostream>#include<algorithm>using namespace std;int bigRand(){return (rand()<<15)|rand();}int main(){const int N=100000;int A[N];generate(A,A+N,bigRand);int max=INT_MIN,min=INT_MAX,k=0;for(int i=0;i<N;i++){if(A[i]>max)max=A[i];else {k++;if(A[i]<min)min=A[i];}}cout<<max<<endl<<min<<endl;cout<<"if(A[i]<min)执行次数减少了:"<<N-k<<endl;system("pause");return 0;}

0 0
原创粉丝点击