练习3-1 重写binsearch函数,使得在循环内部只执行一次测试,比较两种版本函数的运行时间

来源:互联网 发布:数据挖掘 招聘 银行 编辑:程序博客网 时间:2024/05/16 00:53

尝试使用大数组比较运行时间,发现数组大小为521153时没有问题,数组大小为521154时出错。

#include <stdio.h>main(){    int i,x;    int v[521153];    int n=521153;    x=3;    for(i=0;i<521153;++i)        v[i]=i;}

“局部非静态的数组,空间在程序的栈上分配,不同平台的栈大小不同:SunOS/Solaris是8M,Linux是10M,Windows是1M,AIX是64M,都是可以调整的。大数组,建议在堆上分配。”
方法1:

#include <stdio.h>int binsearch(int x,int v[],int n);main(){    int i,x;    int v[100000];    int n=100000;    x=3;    for(i=0;i<100000;++i)        v[i]=i;    binsearch(x,v,n);}int binsearch(int x,int v[],int n){    int low,high,mid;    low=0;    high=n-1;    while(low<=high){        mid=(low+high)/2;        if(x<v[mid])            high=mid-1;        else if(x>v[mid])            low=mid+1;        else            return mid;    }    return -1;}

方法2:

int binsearch(int x,int v[],int n){    int low,high,mid;    low=0;    high=n-1;    mid=(low+high)/2;    while(low<=high && x!=v[mid]){        if(x<v[mid])            high=mid-1;        else            low=mid+1;        mid=(low+high)/2;    }    if(v[mid]==x)        return mid;    else        return -1;}

运行时间几乎没有差异(数量级一样)。跟x大小有关,x较小时方法1测试较少,查找时间短。

0 0