软考
APP下载

15个数折半查找法找出

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

在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("元素不在数组中")

```

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库