The C Programming Language 练习题3-1
2017-10-08 20:00
363 查看
题目
在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。比较两种版本函数的运行时间。
题目分析
想半天没想明白,后来找到了作者答案,一起贴上来吧。
代码实现
结论[/b]
测试了一下,原来的算法耗时0.207秒,新的算法耗时0.187秒。
个人理解原理是由于循环中少了一行语句,所以执行时间减少了。比如原来要做5次循环,每次循环3个语句,要执行3*5=15次,而现在是2个语句,所以执行2*5=10次,所以效率提升了。
在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。比较两种版本函数的运行时间。
题目分析
想半天没想明白,后来找到了作者答案,一起贴上来吧。
代码实现
#include <stdio.h> int binsearchtemp(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 if ( x > v[mid]) low = mid + 1; else return mid; } return -1; } int binsearchtemp2(int x, int v[], int n) { int low, high, mid; low = 0; high = n - 1; mid = (low + high) / 2; while (low <= high && x != v[mid]) { if (x < v[mid]) high = mid + 1; else low = mid + 1; } if (x == v[mid]) return mid; else return -1; } int main() { int numbertest[10] = {3, 5, 9 , 11, 18, 19, 34, 56, 78, 99}; printf("position:%d\n", binsearchtemp(18, numbertest, 10)); printf("position:%d\n", binsearchtemp2(18, numbertest, 10)); }
结论[/b]
测试了一下,原来的算法耗时0.207秒,新的算法耗时0.187秒。
个人理解原理是由于循环中少了一行语句,所以执行时间减少了。比如原来要做5次循环,每次循环3个语句,要执行3*5=15次,而现在是2个语句,所以执行2*5=10次,所以效率提升了。
相关文章推荐
- The C Programming Language 练习题1-23
- <<The C Programming Language>>学习之路-练习题参考答案 1-9
- The C Programming Language 练习题3-4
- The C Programming Language 练习题2-7
- The C Programming Language 练习题4-1
- <<The C Programming Language>>学习之路-练习题参考答案 1-6
- <<The C Programming Language>>学习之路-练习题参考答案 1-12
- <<The C Programming Language>>学习之路-练习题参考答案 1-7
- <<The C Programming Language>>学习之路-练习题参考答案 1-10
- The C Programming Language 练习题1-24
- The C Programming Language 练习题4-6
- <<The C Programming Language>>学习之路-练习题参考答案 1-3
- The C Programming Language 练习题1-21
- The C Programming Language 练习题2-2
- The C Programming Language 练习题2-8
- <<The C Programming Language>>学习之路-练习题参考答案 1-11
- The C Programming Language 练习题1-22
- The C Programming Language 练习题2-6
- The C Programming Language 练习题2-1
- The C Programming Language 练习题4-5