实现二分查找算法的递归及非递归
2017-12-08 16:28
190 查看
什么是二分法算法:
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。算法要求:
1.必须是顺序存储结构2.必须按关键字大小有序排列。
二分法递归实现:
int digui(int *a,int left,int right,int k) { int mid=(right+left)/2; if(right<left) { return -1; } if(a[mid]>k) { return digui(a,left,mid-1,k); } if(a[mid]<k) { return digui(a,mid+1,right,k); } if(a[mid]==k) { return mid; } }
时间复杂的O(log2N)
二分法的非递归算法:
int ndigui(int *a,int sz,int k) { int left=0; int right=sz-1; int mid; while(left<=right) { mid=(left+right)/2; if(a[mid]>k) { right=mid-1; } if(a[mid]<k) { left=mid+1; } if(a[mid]==k) { return mid; } } }
时间复杂度O(log2N)
相关文章推荐
- 实现二分查找算法的递归及非递归。
- 【数据结构】搜索二叉树的(递归与非递归)实现,包括:增Insert,删Remove,查Find
- 超级详细的二叉树的3种遍历方法的递归和非递归的实现
- C#实现(递归和非递归)快速排序和简单排序
- 如何分别使用递归与非递归实现二分查找算法
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- 二叉树的三种遍历方式(递归和非递归的实现方法)
- 数据结构-二叉树的深度(递归和非递归的实现)
- Java实现快速排序递归和非递归
- 利用邻接表存储图,实现其递归与非递归的深度遍历和广度遍历
- 如何分别使用递归与非递归实现二分查找算法
- 归并排序(递归与非递归)的实现
- 43.递归和非递归俩种方法实现二叉树的前序遍历。
- C#实现(递归和非递归)快速排序和简单排序
- 折半查找的递归实现和非递归实现
- 递归和非递归(创建变量)实现strlen
- 如何用栈实现递归与非递归的转换
- 全排序的递归与非递归的实现
- 二分查找算法 递归和非递归
- 递归和非递归俩种方法实现二叉树的前序遍历