对二分搜索算法的测试

#include <cmath> #include <time.h> #include <Windows.h> #include <iostream> using namespace std; typedef long long int _INT64; const unsigned len = 10000000; _INT64 arr[len] = {0}; void getArrayNoRepeat() { for (unsigned i=0; i<len; ++i) arr[i] = i; } _INT64 binarySearch(_INT64 t) { double d; _INT64 i = 0; // 数组的中点为搜索跨度 for (d=1.0; ;++d) { if (pow(2.0,d)>len) { i = (_INT64)pow(2.0, (d-1)); break; } } _INT64 l = -1; // 搜索起始索引 if (arr[i-1] < t) l = len - i; while (i != 1) { i = i/2; if (arr[l+i]<t) l = l+i; } _INT64 p = l+1; if (p>len || arr[p]!=t) p = -1; return p; } int main() { getArrayNoRepeat(); DWORD stime = GetTickCount(); for(int i=0; i<len; ++i) binarySearch(i); //cout << "find in " << binarySearch(i) <<'/n';; DWORD test1 = GetTickCount(); cout << "running time = " << test1 - stime << " ms." <<'/n'; return 0; } 

 

对由范围从0-(10000000-1)组成的顺序数组进行10000000-1次二分搜索的总时间为:26781ms。

平均单次的搜索时间在0ms之下。可能是几千纳秒单位。

你可能感兴趣的:(算法,测试,include)