[求助]折半查找原理是怎么样的……?C语言的
…………题目看了半天也没能看明白
原理 : divide and conquer
其实准确的说也不是,因为我们需要处理的总是1/2,在当前范围外的没有考虑。
龙虾,看清楚题设!
查找9.
先找中间(0+13)/2=6 a[6]=7<9
再查中间(7+13)/2=10 a[10]=14>9
再查找中间(7+9)/2=8 a[8]=9;
查找成功,结束.
先找中间(0+13)/2=6 a[6]=7<9——第一次查找是不是(0+元素个数)/2 // 可以说是元素个数-1(因为0占了一位)
再查中间(7+13)/2=10 a[10]=14>9——从这里开始还是不太明白,是不是和查找到的元素与被查找元素的大于小于关系有关?
// 特别强调折半查找是对有序数组进行查找!也就是说,有序的数组可以通过查找的值和查找中间值来判断你要查找的值是在左边还是右边
再查找中间(7+9)/2=8 a[8]=9;
[此贴子已经被作者于2007-6-29 21:08:20编辑过]
以升序为例
1:第一各中间值是 全部元素的个数/2(或者(元素的序数+1)/2 )
2:判断你所要的值和这个中间值的大小
如果大,那么就是 (第一次中间值序数+1 + 末尾元素序数)/2
如果小,那么就是 (第一次中间值序数-1 + 首元素序数(通常是0))/2
这样逐步缩小范围
3:而后如果出现
比中间值小(这一轮的中间值),但是比上一步中间值大(上一轮的中间值)
那么, 新的中间值序数=((上轮中间值序数)+(这轮中间值序数))/2
如果是降序,则反之
这个折半查找法的思想 和 微积分中间的中值定理的思维有点像
可见你龙虾微积分也学的不好呀