| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2566 人关注过本帖
标题:[求助]折半查找原理是怎么样的……?C语言的
只看楼主 加入收藏
轩辕龙虾
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-6-28
收藏
 问题点数:0 回复次数:12 
[求助]折半查找原理是怎么样的……?C语言的
…………题目看了半天也没能看明白
搜索更多相关主题的帖子: C语言 原理 折半 
2007-06-28 21:43
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
原理 : divide and conquer

其实准确的说也不是,因为我们需要处理的总是1/2,在当前范围外的没有考虑。


Fight  to win  or  die...
2007-06-29 13:42
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
就是冲重中间找起走
如比中间大 就找大的那一边 相反

   好好活着,因为我们会死很久!!!
2007-06-29 13:44
yushui
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:1355
专家分:22
注 册:2006-7-19
收藏
得分:0 
折半查找的前提是数组是排序好了的  呵呵 比如在按从小到大排序的数组中查找一个关键字 从2/1处开始比较  如果比关键字大 就后半个在分2/1再比较 如此递推 到最后一个

fighting!from now on!
2007-06-29 19:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
折半查找:每次取中间的数比较,但为什么可以这样比较,这就要求查找的对象是有序的.
其实很容易想到的,如果和中间数的等,那就在两边找(这样就是折半了).
举个例子:
数组:
1 2 3 4 5 6 7 8 9 12 14 18 19
查找9.
先找中间(0+13)/2=6 a[6]=7<9
再查中间(7+13)/2=10 a[10]=14>9
再查找中间(7+9)/2=8 a[8]=9;
查找成功,结束.

倚天照海花无数,流水高山心自知。
2007-06-29 20:34
轩辕龙虾
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-6-28
收藏
得分:0 
…………呃 可以再问下不

先找中间(0+13)/2=6 a[6]=7<9——第一次查找是不是(0+元素个数)/2
再查中间(7+13)/2=10 a[10]=14>9——从这里开始还是不太明白,是不是和查找到的元素与被查找元素的大于小于关系有关?
再查找中间(7+9)/2=8 a[8]=9;
2007-06-29 20:49
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

中间那个数已经比较过了,所以用再比了.


倚天照海花无数,流水高山心自知。
2007-06-29 21:05
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用轩辕龙虾在2007-6-29 20:49:24的发言:
…………呃 可以再问下不

先找中间(0+13)/2=6 a[6]=7<9——第一次查找是不是(0+元素个数)/2
再查中间(7+13)/2=10 a[10]=14>9——从这里开始还是不太明白,是不是和查找到的元素与被查找元素的大于小于关系有关?
再查找中间(7+9)/2=8 a[8]=9;

龙虾,看清楚题设!

查找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编辑过]


自我放逐。。。
2007-06-29 21:06
轩辕龙虾
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-6-28
收藏
得分:0 
………………这个中间值是根据什么取的?  根据上一次得到的结果取的?
2007-06-29 22:08
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用轩辕龙虾在2007-6-29 22:08:14的发言:
………………这个中间值是根据什么取的? 根据上一次得到的结果取的?

以升序为例

1:第一各中间值是 全部元素的个数/2(或者(元素的序数+1)/2 )

2:判断你所要的值和这个中间值的大小

如果大,那么就是 (第一次中间值序数+1 + 末尾元素序数)/2

如果小,那么就是 (第一次中间值序数-1 + 首元素序数(通常是0))/2

这样逐步缩小范围

3:而后如果出现

比中间值小(这一轮的中间值),但是比上一步中间值大(上一轮的中间值)

那么, 新的中间值序数=((上轮中间值序数)+(这轮中间值序数))/2


如果是降序,则反之

这个折半查找法的思想 和 微积分中间的中值定理的思维有点像

可见你龙虾微积分也学的不好呀


自我放逐。。。
2007-06-29 22:36
快速回复:[求助]折半查找原理是怎么样的……?C语言的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080614 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved