早上在签到的时候,看到玩得好的正看一道人家答的面试题,其中一道是C语言的折半查找,呵呵。。。
来个 原理:
以升序为例
1:第一各中间值是 全部元素的个数/2(或者(元素的序数+1)/2 )
2:判断你所要的值和这个中间值的大小
如果大,那么就是 (第一次中间值序数+1 + 末尾元素序数)/2
如果小,那么就是 (第一次中间值序数-1 + 首元素序数(通常是0))/2
这样逐步缩小范围
3:而后如果出现
比中间值小(这一轮的中间值),但是比上一步中间值大(上一轮的中间值)
那么, 新的中间值序数=((上轮中间值序数)+(这轮中间值序数))/2
如果是降序,则反之
这个折半查找法的思想 和 微积分中间的中值定理的思维有点像
来个 原理:
以升序为例
1:第一各中间值是 全部元素的个数/2(或者(元素的序数+1)/2 )
2:判断你所要的值和这个中间值的大小
如果大,那么就是 (第一次中间值序数+1 + 末尾元素序数)/2
如果小,那么就是 (第一次中间值序数-1 + 首元素序数(通常是0))/2
这样逐步缩小范围
3:而后如果出现
比中间值小(这一轮的中间值),但是比上一步中间值大(上一轮的中间值)
那么, 新的中间值序数=((上轮中间值序数)+(这轮中间值序数))/2
如果是降序,则反之
这个折半查找法的思想 和 微积分中间的中值定理的思维有点像
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/750/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2007-11-9 15:27
评论列表