为什么二分查找法我的时间总是为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)快太多了:)


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程