写出折半查找的递归和非递归算法,并对比分析时间性能,给出分析结论。
时间: 2023-04-23 16:00:30 浏览: 270
折半查找是一种常用的查找算法,它的递归和非递归算法如下:
递归算法:
```
int binarySearch(int arr[], int left, int right, int target) {
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
return binarySearch(arr, left, mid - 1, target);
} else {
return binarySearch(arr, mid + 1, right, target);
}
}
```
非递归算法:
```
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
```
两种算法的时间复杂度都是O(log n),但是非递归算法的常数因子比递归算法小,因此在实际应用中非递归算法的效率更高。
综上所述,折半查找的非递归算法比递归算法更优秀。
阅读全文