给定数组{3,15,6,9,8,5},写一个函数,传入要查找的数字,返回该数字所对应的索引。(分治,使用二分法)
时间: 2024-02-26 11:56:50 浏览: 15
好的,可以使用二分法来进行查找。具体实现可以参考下面的代码:
```python
def binary_search(arr, target):
"""
二分查找函数
:param arr: 待查找的有序数组
:param target: 目标值
:return: 目标值在数组中的索引,如果不存在则返回-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
```
使用该函数,可以很方便地查找给定数字在数组中的位置:
```python
arr = [3, 15, 6, 9, 8, 5]
target = 9
index = binary_search(arr, target)
print(index) # 输出3
```
如果目标数字不存在于数组中,则会返回-1。
相关问题
给定数组[9,3,5,6,2,11,5,6],进行如下操作:查找数字5,并返回其下标
好的,针对您的问题,可以使用以下 Python 代码实现:
```python
arr = [9, 3, 5, 6, 2, 11, 5, 6] # 给定数组
# 使用 enumerate 函数遍历数组,并查找数字 5 的下标
for i, num in enumerate(arr):
if num == 5:
print(i) # 输出下标,即 2 和 6
```
输出结果为:
```
2
6
```
因为数字 5 在数组中出现了两次,所以它的下标是 2 和 6。
写一个c程序编写一个函数使用指针,翻转给定数组的元素
好的,以下是一个使用指针翻转数组元素的C程序:
```c
#include <stdio.h>
void reverse(int *arr, int size) {
int *start = arr;
int *end = arr + size - 1;
while (start < end) {
int temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);
printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
reverse(arr, size);
printf("Reversed array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个程序中,我们定义了一个函数 `reverse`,它接受一个指向数组的指针和数组的大小作为参数。函数中,我们定义了两个指针 `start` 和 `end`,分别指向数组的开头和结尾。然后我们使用一个 while 循环,将 `start` 指向的元素和 `end` 指向的元素交换,并将 `start` 和 `end` 分别向中间移动,直到它们相遇为止。最后,我们在主函数中调用 `reverse` 函数来翻转数组,并打印输出结果。