c语言实现折半查找算法的非递归和递归算法。注:算法实现时可以把元素类型均简化为int型。
时间: 2023-06-03 22:01:32 浏览: 152
好的,关于折半查找算法的非递归和递归算法,我可以回答你。首先,折半查找算法(Binary Search)也被称为二分查找算法,在有序数组中查找目标元素的过程中,将数组折半,取中间位置作为比较对象,如果中间元素等于要查找的元素,则查找成功;如果中间元素比要查找的元素大,则在左半部分继续查找;反之,在右半部分查找,直到找到目标元素或查找失败。折半查找算法的时间复杂度为O(log n)。
非递归实现:
int binary_search(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;
}
递归实现:
int binary_search(int arr[], int left, int right, int target){
if(left > right){
// 查找失败
return -1;
}
else{
// 取中间位置
int mid = (left + right) / 2;
// 如果中间元素等于要查找的元素,则查找成功
if(arr[mid] == target){
return mid;
}
else if(arr[mid] > target){
// 在左半部分查找
return binary_search(arr, left, mid - 1, target);
}
else{
// 在右半部分查找
return binary_search(arr, mid + 1, right, target);
}
}
}
以上是折半查找算法的非递归和递归实现,希望回答能够帮到你。
阅读全文