输入一个整数,在一个有序数列中使用折半查找法查找是否存在该整数。
时间: 2023-04-24 13:02:26 浏览: 286
折半查找法是一种在有序数列中查找特定元素的算法。它的基本思想是将待查找的区间不断缩小,直到找到目标元素或者确定目标元素不存在为止。具体实现时,每次将待查找区间的中间元素与目标元素进行比较,如果相等则返回该元素的位置,如果目标元素小于中间元素,则在左半部分继续查找,否则在右半部分继续查找。这样每次查找都可以将待查找区间缩小一半,因此时间复杂度为O(log n)。
相关问题
由N个有序整数组成的数列已放在一维数组中,给定程序的功能是:利用折半查找法查找整数m在数组中的位置。若找到,返回其下标值,否则返回-1。
以下是一个利用折半查找法查找整数m在有序数组中的位置的示例代码:
```c
int binarySearch(int arr[], int n, int m) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == m) {
return mid;
} else if (arr[mid] > m) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
```
其中,`arr`为要查找的有序数组,`n`为数组的长度,`m`为要查找的整数。首先将左右边界设为数组的首尾元素下标,然后在循环中计算中间位置的下标。如果该位置的元素值等于要查找的整数`m`,直接返回该位置下标,否则根据数组有序的特性,如果该位置的元素值大于`m`,说明要查找的数在左半部分,将右边界设为该位置前一个元素的下标;如果该位置的元素值小于`m`,说明要查找的数在右半部分,将左边界设为该位置后一个元素的下标。直到左右边界相遇,说明整个数组中没有要查找的数,返回-1。
c语言由N个有序整数组成的数列已放在一维数组中,给定程序的功能是:利用折半查找法查找整数m在数组中的位置。若找到,返回其下标值,否则返回-1。
以下是实现折半查找法的C语言代码:
```c
int binarySearch(int arr[], int n, int m) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == m) {
return mid;
} else if (arr[mid] < m) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
其中,arr为有序整数数组,n为数组长度,m为要查找的整数。函数返回m在数组中的下标,若未找到则返回-1。函数实现的思路为:首先将查找区间设为整个数组,然后每次取中间位置的元素与要查找的数进行比较,若相等则返回下标,若小于则在右半部分继续查找,若大于则在左半部分继续查找,直到查找完整个区间或找到为止。
阅读全文