为二分查找的非递归算法设计主函数,完善该算法,并通过运行来验证。
时间: 2023-09-09 07:03:38 浏览: 135
Java实现二分查找的递归和非递归算法
### 回答1:
好的,下面是中文回复:
二分查找的非递归算法主要是通过循环来实现的,我们可以设计一个主函数来调用该算法。主函数的作用是读入需要查找的元素和有序数组,然后调用二分查找算法来查找该元素在数组中的位置。
以下是一个简单的二分查找非递归算法的主函数:
```
#include <stdio.h>
int binary_search(int arr[], int n, int target) {
int left = , right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int n = sizeof(arr) / sizeof(int);
int target = 7;
int index = binary_search(arr, n, target);
if (index == -1) {
printf("Element not found\n");
} else {
printf("Element found at index %d\n", index);
}
return ;
}
```
在上面的代码中,我们首先定义了一个有序数组 `arr`,然后定义了需要查找的元素 `target`。接着,我们调用 `binary_search` 函数来查找该元素在数组中的位置,并将结果存储在 `index` 变量中。最后,我们根据 `index` 的值来输出查找结果。
运行上面的代码,输出结果为:
```
Element found at index 3
```
这表明元素 7 在数组中的位置为 3。
### 回答2:
二分查找的非递归算法主要通过迭代来实现。主函数起到调用和验证算法的作用,具体代码如下:
```
#include <iostream>
using namespace std;
int binarySearch(int arr[], int target, int low, int high) {
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {2, 5, 7, 9, 12, 15, 17};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 12;
int result = binarySearch(arr, target, 0, n - 1);
if (result == -1) {
cout << "目标元素不在数组中" << endl;
} else {
cout << "目标元素在数组中的索引为:" << result << endl;
}
return 0;
}
```
在上述代码中,首先定义了一个`binarySearch`函数用来实现非递归的二分查找算法。其中,参数`arr`表示要查找的数组,`target`表示要查找的目标元素,`low`和`high`分别表示数组的起始位置和结束位置。在函数中使用了一个`while`循环,当`low`小于等于`high`时执行循环,不断通过二分法将查找范围缩小,直到找到目标元素或者确定目标元素不存在为止。
在主函数中,首先定义了一个有序数组`arr`,然后通过`sizeof`操作符计算出数组的长度,接着定义了要查找的目标元素`target`,并调用`binarySearch`函数进行查找。最后根据查找结果输出对应的信息。
运行代码,可以得到输出结果:目标元素在数组中的索引为:4,说明目标元素12在数组中的索引为4,验证了二分查找的非递归算法的正确性。
### 回答3:
二分查找是一种高效的搜索算法,用于在有序数组中查找特定元素。非递归算法相较于递归算法更加简洁和高效。
首先,我们可以在主函数中定义一个有序数组和要查找的目标元素。然后,调用二分查找的非递归函数进行查找。
以下是一个示例的主函数设计:
```python
def binary_search(arr, target):
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
def main():
arr = [1, 3, 5, 7, 9, 11, 13, 15, 17]
target = 7
result = binary_search(arr, target)
if result != -1:
print("元素在数组中的索引为:", result)
else:
print("元素不在数组中")
if __name__ == "__main__":
main()
```
这个主函数中,我们定义了一个有序数组arr和要查找的目标元素target。然后,我们调用binary_search函数进行查找,并将返回的结果存储在result中。
最后,我们根据result的值判断是否成功找到目标元素,并打印相应的结果。
通过运行该代码,我们可以得到以下输出:
```
元素在数组中的索引为: 3
```
这表明目标元素7在有序数组的索引为3,经过验证,二分查找的非递归算法成功找到了目标元素。
阅读全文