写出折半查找的实现代码,并写出它的定义等一系列东西
时间: 2024-09-12 17:03:36 浏览: 42
折半查找,也称为二分查找,是一种在有序数组中查找特定元素的高效算法。它通过每次比较中间元素将搜索区间缩小一半来进行查找。以下是使用Python编写的折半查找的简单实现:
```python
def binary_search(arr, target):
"""
折半查找函数,arr是一个已排序的列表,target是我们要查找的目标值
返回目标值的索引,如果不存在则返回 -1
"""
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
# 示例:
# 对于有序数组 [1, 3, 5, 7, 9]
# binary_search([1, 3, 5, 7, 9], 5) 将返回 2,因为5在数组中的索引是2
# binary_search([1, 3, 5, 7, 9], 6) 将返回 -1,因为6不在数组中
```
相关问题
写一个代码,实现折半查找算法
好的,以下是 Python 代码实现折半查找算法:
```python
def binarySearch(arr, target):
"""
在有序数组 arr 中查找元素 target,返回其下标,若不存在则返回 -1
"""
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
```
其中,arr 表示有序数组,target 表示待查找元素。该函数通过不断缩小查找范围,最终找到目标元素或者判断其不存在,返回相应的下标或 -1。
用c语言写出利用折半查找实现确定记录所在块的分块查找
好的,以下是用 C 语言实现利用折半查找实现确定记录所在块的分块查找的代码:
```c
#include <stdio.h>
// 定义块的大小
#define BLOCK_SIZE 5
// 分块查找函数
int blockSearch(int arr[], int n, int x)
{
// 计算块的数量
int blockNum = (n + BLOCK_SIZE - 1) / BLOCK_SIZE;
// 遍历每个块
for (int i = 0; i < blockNum; i++)
{
int begin = i * BLOCK_SIZE; // 计算块的起始下标
int end = begin + BLOCK_SIZE - 1; // 计算块的结束下标
if (end > n - 1)
{
end = n - 1;
}
// 判断 x 是否在当前块内
if (x >= arr[begin] && x <= arr[end])
{
// 在当前块内,进行折半查找
int left = begin;
int right = end;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == x)
{
// 找到了,返回下标
return mid;
}
else if (arr[mid] < x)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
// 没有找到,返回 -1
return -1;
}
}
// 没有找到,返回 -1
return -1;
}
int main()
{
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 17;
int index = blockSearch(arr, n, x);
if (index != -1)
{
printf("找到了,下标为:%d\n", index);
}
else
{
printf("没有找到!\n");
}
return 0;
}
```
在上面的代码中,`BLOCK_SIZE` 宏定义了块的大小,`blockSearch` 函数实现了分块查找算法,主函数中演示了使用该函数查找一个数的下标。
阅读全文