计时的结果,都是0.000000......
/*
练习3-1 在上面有关二分查找的例子中,在while循环语句内共作了两次测试,其实只要一次就够了(以把更多的测试放在外面为代价)。重写
这个函数,使得在循环内部只进行一次测试,并比较两者运行时间的区别。
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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
low = mid + 1;
/* 去掉了相等的测试,只保留小于或不小于的测试 */
}
/* 虽然去掉了相等的测试,但如果有相等的情况,总是在mid、low、high这三者之中 */
if (v[mid] == x)
return mid;
else if (v[low] == x)
return low;
else if (v[high] == x)
return high;
return -1;
}
main()
{
int x;
int v[] = {0, 10, 15, 25, 100, 200, 321, 333, 345, 500,
501, 502, 503, 504, 505, 566, 589, 599, 600, 601,
610, 620, 630, 640, 650, 660, 670, 680, 690, 699,
710, 720, 730, 740, 750, 760, 770, 780, 790, 799,
800, 810, 820, 830, 840, 850, 860, 870, 880, 890};
clock_t begin, end;
double cost;
begin = clock(); /* 开始计时 */
x = 650; /* 要查找的数值 */
printf("search %d...", x);
printf("%d\n", binsearch(x, v, 50));
end = clock(); /* 停止计时 */
cost = (double)(end - begin) / CLOCKS_PER_SEC;
printf("%lf seconds\n", cost);
}