8.线性搜索算法和二进制搜索算法

文章介绍了两种基本的搜索算法:线性搜索和二进制搜索。线性搜索是对每个元素逐一检查直到找到目标值,适合未排序的数据集。二进制搜索适用于已排序的数组,通过不断缩小搜索范围,其时间复杂度为Ο(logn),效率更高。
摘要由CSDN通过智能技术生成

算法:线性搜索算法

线性搜索是一种非常简单的搜索算法。在这种类型的搜索中,逐个对所有项目进行顺序搜索。检查每个项目,如果找到匹配项,则返回该特定项目,否则搜索将继续,直到数据收集结束。

线性搜索动画

算法

Linear Search ( Array A, Value x)

Step 1: Set i to 1
Step 2: if i > n then go to step 7
Step 3: if A[i] = x then go to step 6
Step 4: Set i to i + 1
Step 5: Go to Step 2
Step 6: Print Element x Found at index i and go to step 8
Step 7: Print element not found
Step 8: Exit

伪代码

procedure linear_search (list, value)

   for each item in the list
      if match item == value
         return the item's location
      end if
   end for

end procedure
 end if
   end for

end procedure

Procedure binary_search
A ← sorted array
n ← size of array
x ← value to be searched

Set lowerBound = 1
Set upperBound = n

while x not found
if upperBound < lowerBound
EXIT: x does not exists.

  set midPoint = lowerBound + ( upperBound - lowerBound ) / 2

  if A[midPoint] < x
     set lowerBound = midPoint + 1

  if A[midPoint] > x
     set upperBound = midPoint - 1

  if A[midPoint] = x
     EXIT: x found at location midPoint

end while

算法:二进制搜索算法

二进制搜索是一种快速搜索算法,运行时复杂度为Ο(log n)。这种搜索算法的工作原则是分而治之。为使此算法正常工作,数据收集应采用排序形式。

二进制搜索通过比较集合的最中间项来查找特定项。如果匹配发生,则返回项目的索引。如果中间项大于项,则在中间项左侧的子阵列中搜索项。否则,在中间项右侧的子阵列中搜索项。该过程也在子阵列上继续,直到子阵列的大小减小到零。

二进制搜索如何工作?

要使二进制搜索起作用,必须对目标数组进行排序。我们将通过一个图例来学习二元搜索的过程。以下是我们的排序数组,让我们假设我们需要使用二进制搜索来搜索值31的位置。

二进制搜索

首先,我们将使用此公式确定数组的一半

mid = low + (high - low) / 2

这里,0 +(9-0)/ 2 = 4(整数值为4.5)。所以,4是数组的中间位置。

二进制搜索

现在我们将存储在位置4的值与搜索的值进行比较,即31.我们发现位置4的值是27,这不匹配。由于值大于27并且我们有一个排序数组,因此我们也知道目标值必须位于数组的上半部分。

二进制搜索

我们将低点改为+1,再次找到新的中值。

low = mid + 1
mid = low + (high - low) / 2

我们新的中期现在是7。我们将位置7处存储的值与目标值31进行比较。

二进制搜索

存储在位置7的值不匹配,而是比我们正在寻找的值更多。因此,该值必须位于此位置的下半部分。

二进制搜索

因此,我们再次计算中期。这次是5。

二进制搜索

我们将位置5处存储的值与目标值进行比较。我们发现这是一场比赛。

二进制搜索

我们得出结论,目标值31存储在位置5处。

二进制搜索将可搜索项目减半,从而减少了对更少数字进行比较的次数。

伪代码

二进制搜索算法的伪代码应如下所示 -

Procedure binary_search
   A ← sorted array
   n ← size of array
   x ← value to be searched

   Set lowerBound = 1
   Set upperBound = n

   while x not found
      if upperBound < lowerBound
         EXIT: x does not exists.

      set midPoint = lowerBound + ( upperBound - lowerBound ) / 2

      if A[midPoint] < x
         set lowerBound = midPoint + 1

      if A[midPoint] > x
         set upperBound = midPoint - 1

      if A[midPoint] = x
         EXIT: x found at location midPoint
   end while

end procedure
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

度假的小鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值