c语言折半查找法查找,c语言折半查找法查找数是否存在

kodinid 3 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言折半查找法查找的问题,于是小编就整理了4个相关介绍c语言折半查找法查找的解答,让我们一起看看吧。

  1. 折半查找的适用条件?
  2. 关于折半查找的比较次数?
  3. 折半查找的时间复杂度?
  4. c语言三分法?

折半查找的适用条件

适用的前提条件:

1. 存储数组中(例如一维数组)

c语言折半查找法查找,c语言折半查找法查找数是否存在-第1张图片-安济编程网
图片来源网络,侵删)

2. 数组元素为有序(例如升序)查找的基本思想:折半查找,设查找的元素为value value与中间元素(middle = left + (right -left) / 2这样做的好处防止中间元素出现越界)比较,若比中间值小则查找范围在middle + 1继续查找,若比中间值大则查找范围在middle -1,若与中间值相等则查找结束索引元素为value = middle。

关于折半查找的比较次数?

第五个查找1次 第二个和第七个查找两次 第一,第三和第六,第八要查找三次 第四和第九要查找四次 一共25次 ASL=25/9 查找值为21的结点需要比较2次。

折半查找的时间复杂度?

***设对n个元素的折半查找需要消耗的时间为t(n)。容易知道:

c语言折半查找法查找,c语言折半查找法查找数是否存在-第2张图片-安济编程网
(图片来源网络,侵删)

如果n = 1,则t(n) = c1

如果n > 1,则t(n) = t(n/2) + c2

其中n/2需要取整,c1、c2都是

c语言折半查找法查找,c语言折半查找法查找数是否存在-第3张图片-安济编程网
(图片来源网络,侵删)

对于正整数n,可以有:

t(n) = t(n/2) + c2

= t(n/4) + 2*c2

= t(n/8) + 4*c2

= ...

c语言三分法?

这个呀,楼主很有创造力,其实算法都是人设计的嘛,你想有就可以有的。

具体思想应该跟二分查找法差不多吧。给出n个已经排好序的数,在n/3和2n/3处各取一个数,跟待查的数比较,确定待查数所在的范围。编程复杂度应该比二分法大一些,因为需要考虑的情况很多

到此,以上就是小编对于c语言折半查找法查找的问题就介绍到这了,希望介绍关于c语言折半查找法查找的4点解答对大家有用。

标签: 查找 折半 元素