《C程序设计语言》学习笔记——练习3-1

计时的结果,都是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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值