好久没写算法,写个二分查找练练手。。。
//recursive
int binarySearch_recursive(int *array,int lowInd ,int highInd,int searchValue){
int middleInd =(lowInd+highInd)/2;
if (lowInd<=highInd) {
if(array[middleInd]<searchValue){
//search in top half
lowInd = middleInd+1;
return binarySearch(array,lowInd,highInd,searchValue);
}else if(array[middleInd]>searchValue){
//search in low half
highInd = middleInd-1;
return binarySearch(array,lowInd,highInd,searchValue);
}else {
//find value
return middleInd;
}
}else{
return -1;
}
return -1;
}
//non recursive function()
int binarySearch_iterative(int *array,int length,int searchValue){
int low =0,high = length-1;
int middle =-1;
while (low<=high) {
middle =(low+high)/2;
if(array[middle]>searchValue){
high = middle-1;
}else if(array[middle]<searchValue){
low = middle+1;
}else {
//find value
return middle;
}
}
return -1;
}
分享到:
相关推荐
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
用C语言开发的递归和非递归二分查找算法,具体内容详见代码
Java实现二分查找的递归和非递归算法
这里本人自己写的是折半查找算法(又称二分查找)的c++代码的实现, 用的是递归的方法和非递归的方法, 里面的代码已经编译通过,并且优化好, 有需要的朋友可以下载借鉴一下
二分查找的递归算法和非递归算法,面试的时候被问到,当着技术主管的面写算法
C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑...
基于java语言的二分查找,递归以及非递归算法,仅供学习娱乐
使用Python3实现非递归的二分查找算法,资源中包含具体实现代码与单元测试代码,已进行代码重构,代码风格整洁易读
* 非递归的二分查找:二分查找也可以用非递归的算法,但是分治算法通常要回到递归。分治算 * 法常常是一个方法,在这个方法中含有两个对自身的递归的调用。 * * 分治算法:递归的二分查找是分治算法的一种...
C++ 中二分查找递归非递归实现并分析 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑不全边界问题。 ...
主要介绍了PHP二分查找算法,结合实例形式分析了php基于递归与非递归方法实现二分查找的具体操作技巧,需要的朋友可以参考下
主要介绍了python二分法查找算法实现方法,结合实例形式分析了Python使用递归与非递归算法实现二分查找的相关操作技巧,需要的朋友可以参考下
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤: ... // 非递归算法 function binary_search(arr, key) { var low = 0, high = arr.length - 1; while(low
06-005二叉树的前序、中序和后序遍历的递归与非递归算法 06-006统计二叉树中叶子结点个数、按给定的先序序列建立二叉链表 06-007线索链表的建立与遍历 06-008树的存储结构、森林和二叉树的转换、树和森林的遍历 06-...
二分查找(非递归) <*******\n"); printf("\t***********> 3.二分查找(递归) <*******\n"); printf("\t***********> 4,直接插入排序 <*******\n"); printf("\t***********> 5.直接选择排序 <*******\n"); ...
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题...和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉...
代码如下:#include 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...