希赛考试网
首页 > 软考 > 软件设计师

15个数折半查找法找出

希赛网 2024-03-10 12:00:03

折半查找法,也称二分查找法,是一种常用的查找算法。其基本思想是将一个有序的数据集合,按照中间位置分成左右两个子序列,并判断要查找的数据与中间位置的关系,然后递归查找所在的子序列。

在15个数的数据集合中使用折半查找法,以下从多个角度进行分析,进一步深化对算法的理解。

思路分析

1. 数组必须有序

使用折半查找法查找一个数据的前提条件是,数组必须有序。如果数据集合无序,则需要先排序,采用其他的排序算法,比如冒泡排序、插入排序、快速排序等。

2. 折半查找法的时间复杂度为O(log n)

折半查找法的时间复杂度为O(log n),其中n表示数据集合的大小。折半查找法的时间复杂度比线性查找法的O(n)要快得多。这也是折半查找法常被使用的一个重要原因。

3. 折半查找法需要的空间复杂度为O(1)

折半查找法需要的空间复杂度为O(1),即算法只需要使用常量级别的额外空间,而不需要额外的内存空间来存储某些数据。这样可以节省内存资源,适用于内存不足的情况。

4. 折半查找法是一种不适合用于动态数据集合的算法

对于不断插入新数据的数据集合,折半查找法难以处理。因为每次插入新数据就需要重新排序,插入前面的数据,使数据集合有序。而插入后面的数据就需要移动后面的所有数据,代价较大。

实现过程

在15个数据的数据集合中,使用折半查找法找出数据为7的位置。

每次查找的过程如下:

1. 确定数组的中间位置

在一个有序的数据集合中,最中间的元素位置即为:(low+high)/2。

对于15个数来说,mid=(0+14)/2=7。

2. 判断要查找的数据在中间元素的哪一边

如果我们要查找的数据为7,和mid=7相等,那么就可以直接返回7所在位置。

如果我们要找的数据比mid位置元素小,那么我们就需要在左边继续查找。

如果我们要找的数据比mid位置元素大,那么我们就需要在右边继续查找。

3. 递归查找

根据上一步的判断,如果要继续查找,那么就需要在剩余的子序列中使用相同的方法来查找。

下面是完整的查找代码实现:

```

def binarySearch(arr, low, high, x):

# Check base case

if high >= low:

mid = (high + low) // 2

# If element is present at the middle itself

if arr[mid] == x:

return mid

# If element is smaller than mid, then it can only

# be present in left subarray

elif arr[mid] > x:

return binarySearch(arr, low, mid - 1, x)

# Else the element can only be present in right subarray

else:

return binarySearch(arr, mid + 1, high, x)

else:

# Element is not present in array

return -1

# Test array

arr = [2, 3, 4, 10, 40, 50, 60, 65, 70, 80, 90, 91, 92, 95, 100]

x = 7

# Function call

result = binarySearch(arr, 0, len(arr)-1, x)

if result != -1:

print("元素在数组中的索引为", str(result))

else:

print("元素不在数组中")

```

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件