作者说 有百分之九十的程序员在程序中发现了bug(同时怀疑那些没有发现bug的正确性)
所以尽管二分查找是我们感觉上比较简单的一个程序,但是我们依然不可小视;
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
要求是数组有序,当然,若是无序的话排序即可(升序或降序无所谓,例子中是有序的);
有了主要思想,下面贴出代码(我也不能保证我不是那90%的人之一,欢迎提点):
#include <iostream>
#include <cstring>
using namespace std;
int BinarySearch(int s[], int x, int low, int high)
{
if( high < low) return -1; //找不到
int middle = (low + high) / 2; //二分
if( x == s[middle]) return middle; //找到并返回
else if( x < s[middle]) //关键字小于中值,继续二分查找,并将上限改为middle
BinarySearch(s, x, low, middle - 1);
else //关键字大于中值,继续二分查找,并将下限改为middle
BinarySearch(s, x, middle + 1, high);
}
int main()
{
int s[] = {0, 3, 5, 7, 11, 14, 16, 34, 50, 65, 70}; //递增序列,也可运用动态数组存数据
cout<<"请输入需要查找的数:";
int num;
cin>>num;
int n = sizeof(s) / sizeof(int);
int index = BinarySearch(s, num, 0, n - 1);
if(index >= 0) //根据返回值判断是否在数组中
cout<<"数字"<<num<<"在数组第"<<index + 1<<"个"<<endl;
else
cout<<"数字"<<num<<"不在数组中"<<endl;
return 0;
}
试运行:
祝大家在新的一年里 学有所成 工作顺利
欢迎指点,o(∩_∩)o
分享到:
相关推荐
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
Java二分查找递归算法
//二分查找,递归实现 int binarySearch(int a[],int low,int high,int key) { //查找某元素是否在数组中,若存在,则返回下标,否则返回-1; int mid=(low+high)/2; if(low>high){ return -1;//该元素不...
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为...1. 递归,面向过程编程,简单直接 2. 面向对象编程,别人写的,
二分查找的递归与非递归实现(java版)
这个是二分检索的递归实现 具体的进去看看 有注释
n皇后非递归实现,n皇后非递归实现,n皇后非递归实现,n皇后非递归实现,n皇后非递归实现
java语法 method 递归 马克-to-win java视频 方法 重载
全排列-基于递归实现
C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的算法。但是呢,又容易写错。因为总是考虑...
这里本人自己写的是折半查找算法(又称二分查找)的c++代码的实现, 用的是递归的方法和非递归的方法, 里面的代码已经编译通过,并且优化好, 有需要的朋友可以下载借鉴一下
递归,可以实现多位数组的图像显示.......
用C语言开发的递归和非递归二分查找算法,具体内容详见代码
C++ C++教程 C++源码 C++程序设计 教程 标准C++程序设计教程 源代码 计算器 递归 递归计算器
栈与递归--含分治与回溯.zip
迭代顺序查找、递归顺序查找、二分查找之间的对比
数据结构:栈与递归--含分治与回溯.ppt
第6章 函数和递归(C++版) 第二节 递归算法-2021-01-25(B).pdf
二分搜索的递归和非递归实现。比较简单的实现。
文件递归-XML递归-树图递归 面试中的常见递归算法:附带截图和详细代码