首先声明:这是一个经过同学分析的、老师要求的、自己脑袋思考的、打过草稿的、用圆珠笔,右手亲手写的java有关的二分查找。
什么是二分查找:以一个数组(已经升序排列好了的)来分析,首先找到整个数组索引值的中间点的数组的key,如果等于你所要找的值X则这个索引值就是你要找的;如果>X,证明素要找的的前半部分,否则在后半部分,然后递归即可。(当然,这是我个人的理解)
我的代码实现:
//我以一个int数组 找一个int x为例
static int low,high;//low是第一个索引值,high是最后一个索引值
int arr[]=new int[Len]; //Len已知
low=0;high=Len-1;//一开始给他们赋初值
public int fun(int x){
int mid=(low+high)/2;//将索引的中间值赋给mid
if(low>=high){//最小索引都大于最大的了肯定就是没找到了
return -1;
}else if(arr[mid]==x){//刚好找到
return mid;
}else if(arr[mid]>x){//左半部分
high=mid-1;
return fun(x);
}else if(arr[mid]<x){
low=mid+1;
return fun(x);
}
return -1;
}
他人理解:首先将待查值K与有序表array[0]到array[n-1]的中点mid上的关键字array[mid].key进行比较,若相等,则查找成功;否则,若array[mid].key>k , 则在array[1]到array[mid-1]中继续查找,若有array[mid].key<k , 则在array[mid+1]到array[n-1]中继续查找。每通过一次关键字的比较,区间的长度就缩小一半,区间的个数就增加一倍,如此不断进行下去,直到找到关键字为K的元素;若当前的查找区间为空(表示查找失败)。(比较专业)
int bin_search (NODE array[ ],int n,int k)
{ int low=0,hig=n-1,mid;
while(low<=hig)
{ mid=(low +hig)/2; //取区间中点
if (array[mid].key= =k) return(mid); //查找成功
if (array[mid].key>k)
hig=mid-1; //在左子区间中查找
else low=mid+1; } //在右子区间中查找
return(-1); } //查找失败
感觉还是自己写的自己理解容易些,多亏了志桢和国栋耐心的修改哈!虽然之前就看过二分查找,也大致了解二分的思想,但到底还是不动手不知道这个有多难啊!!!
分享到:
相关推荐
- **算法特点**:二分查找法是一种高效的查找算法,其核心在于每次比较都能使搜索范围减半。 - **应用场景**:适用于已经排序好的数组,尤其在大数据量的情况下优势明显。 ### 16. 知识归纳的方式 **知识点概述:*...
2. **搜索**:二分查找是一种在有序数组中查找特定元素的高效方法,Python可以轻松实现。此外,深度优先搜索(DFS)和广度优先搜索(BFS)是解决图和树问题的常用技术。 3. **图论**:在Baekjoon中,图的表示和遍历...
【Evernote】是一款顶级的知识管理工具,特别适合用于实践GTD(Getting Things Done)方法论。...通过熟练掌握Evernote的GTD应用,可以提高工作效率,实现事务管理的自动化,让大脑专注于更重要的创造性思考。
- **大脑**: 控制机器人的程序,相当于其“思维”中心。 - **动作**: 任何机器人都具备一定的动作能力,用于执行特定的任务。 - **身体**: 拥有一定的物理形态,可以是拟人化的也可以是非拟人化的。 **1.2 ...
在这个部分中,教师引入机器人的概念,通过播放视频和讨论,引导学生思考机器人的定义和特征。学生通过观看视频和讨论,开始了解机器人的基本概念和特征,并开始探索机器人的定义和特征。 第二部分:以任务为驱动...
通过记录,我们不仅捕获了知识,还激活了大脑的思考和理解过程。 2. 整理思路:笔记是思维的可视化,通过梳理和组织信息,我们可以更清晰地理解概念之间的联系,从而形成知识框架。 3. 便于回顾:当我们需要复习或...
第一遍复习可以只看题,但以后就必须自己试着做了,先不看答案,完全通过自己的能力做着试试,不管能做到什么程度,起码你自己先思考了,只有启动自己的大脑,才会使知识更深入的得到理解和掌握,才能真正成为自己的...
例如,学习双指针、排序、二分查找、动态规划、递归、贪心思想、分治、深度优先搜索(DFS)、广度优先搜索(BFS)等算法,并尝试在力扣平台上解决相关的练习题。 在刷题的过程中,有效的方法能够帮助我们快速进步,...
了解这些基础知识后,我们可以进行体验与探索,比如查找计算机微型化、网络化、智能化和多功能化的实例,以及思考信息社会的标志是什么。通过这样的学习,我们能更好地理解和应用计算机,从而在信息化时代中更加自如...
思考" 是 "think",大脑活动的一部分。 28. "非常" 是副词 "very",加强形容词的程度。 29. "学习;学会" 是 "learn",获取新知识或技能。 30. "大约;关于;到处" 是介词 "about",有多种含义。 31. "历史" 是 ...