为什么二分查找法我的时间总是为0?
来源:2-4 亲自试验自己算法的时间复杂度
宝慕林2471919
2019-04-22
int main()
{
int n3 = 10000000;
int* arr3 = Myutil::generateorderarray(n3);
clock_t starttime3 = clock();
int j =MyAlgorithmTester::binarysearch(arr3,n3,188888);
clock_t endtime3 = clock();
cout << "binarysearchtime" << double(endtime3 - starttime3) / CLOCKS_PER_SEC << "s" << endl;
delete []arr3;
return 0;
}
namespace MyAlgorithmTester {
int binarysearch(int arr[], int n, int target)
{
int l = 0; int r = n - 1;
while (l <= r)
{
int mid = l + (r - l) / 2;
if (arr[mid] == target)
return mid;
if(arr[mid] > target)
{
r = mid - 1;
}
else
{
l = mid+1;
}
}
return -1;
}
};
写回答
1回答
-
liuyubobobo
2019-04-22
如果你确定你的实现是正确的话,也是正常的。毕竟,我录这个课程的机器,是非常慢的(12年的macbook低配),使用现代比较新的机器,很有可能测不出来了。因为logn就是这么快。
多快呢?int最大大概是2*10^9左右,log(2*10^9)大概为30。也就是30左右的操作,就能对一个2*10^9这么大的数组完成查找:)
这就是为什么,O(n^2)的算法和O(nlogn)的算法,有那么大的差异的原因,因为O(logn)比O(n)快太多了:)
继续加油!:)
00
相似问题