时间:2021-05-20
复制代码 代码如下:
#include <stdio.h>
int binSearch(int arr[], int low, int high, int key);
int binSearch2(int arr[], int low, int high, int key);
int binSearch3(int arr[],int start,int ends,int key);
int main() {
int arr[]={3,8,11,15,17,22,23,26,28,29,34};
//printf("%d",binSearch(arr,0,10,26));
printf("%d",binSearch3(arr,0,10,26));
return 1;
}
int binSearch(int arr[], int low, int high, int key) {
int flag=-1;
int mid = (low + high) / 2;
if (low > high) {
flag= -1;
} else {
if (arr[mid] < key) {
flag= binSearch(arr, mid + 1, high, key);
} else if (arr[mid]>key) {
//比如要找的节点在下面这一层 那么这一层会返回下标上来 用flag接住嘛...
flag= binSearch(arr,low,mid-1,key);//又差一点忘记了用flag取接住返回值了
} else {
flag= mid;
}
}
return flag;
}
//ok==============================
int binSearch2(int arr[], int low, int high, int key) {
int mid = (low + high) / 2;
if (low > high) {
return -1;
} else {
if (arr[mid] < key) {
return binSearch2(arr, mid + 1, high, key);
} else if (arr[mid]>key) {
return binSearch2(arr,low,mid-1,key);
} else {
return mid;
}
}
}
int binSearch3(int arr[],int start,int ends,int key){
int mid=-1;
while(start<=ends){
mid=(start+ends)/2;
if(arr[mid]<key){
start=mid+1;
}else if(arr[mid]>key){
ends=mid-1;
}else{
break;
}
}//上述循环结束后不一定就是 start>ends的 因为有break语句
if(start>ends){
mid=-1;
}
return mid;
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C语言数据结构中二分查找递归非递归实现并分析前言:二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的
C++中二分查找递归非递归实现并分析二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,
php二分查找示例二分查找常用写法有递归和非递归,在寻找中值的时候,可以用插值法代替求中值法。当有序数组中的数据均匀递增时,采用插值方法可以将算法复杂度从中值法
//二分查找健忘递归版本复制代码代码如下:functionbinary_search(arr,target,low,high){if(lowarr[min])r
Python寻找两个有序数组的中位数审题:1.找出意味着这是一个查找算法题2.算法复杂度log级别,就是提示你是二分查找3.二分查找实现一般为递归(1)递归包括