推荐:
美食
旅游
音乐
摄影
影视
数码
游戏
地理
政务
汽车
看书
人物
体育
购物
更多
站点栏目:
首页
科技
生活
职业
教育
资讯
关于
会员:
首页
科技
生活
职业
教育
资讯
关于
美食
旅游
音乐
摄影
影视
数码
游戏
地理
政务
汽车
看书
人物
体育
购物
更多
培训
学习
情感
房产
金融
工作
农业
命理
动物
健康
历史
其他
展开
二分法查找的实现【java实现二分法查找】
发布于 2021-10-31 05:36:18 浏览
264
次
前述
详情
问题解析:
【】
1、
1.理清思路:首先得明确最简单的基础,就是如何实现二分法查找,很简单的想到的是取中间值,比较要查找的值,查找对象。我们可以先创建一个类,进行简单的处理。如下图:
2、
class find{
3、
public int Dicfind(int min,int max,int a[],int value){
4、
return value;}
5、
}
6、
2.定义一个类,然后写一个方法来接收一个数组的下标和要查找的值,二分法首先是对中间那个数和要查找的数进行比较,即有
7、
class find{
8、
public int Dicfind(int min,int max,int a[],int value){
9、
int mid=(min+max)/2;
10、
//比较a[mid]和value
11、
if(a[mid]>value){
12、
}
13、
return value;
14、
}
15、
}
16、
3.现在就是思考的难点来了,如何分析并继续下一步查找问题,例如给你一组数据a[]={1,2,4,5,6};查找的值为2,第一次查找mid=2;a[2]>2;那么如何进行下一步查找呢,这里我们使用递归调用,这就是为什么我们要设置方法返回类型为int的原因(实现递归)。代码如下:
17、
class find{
18、
public int Dicfind(int min,int max,int a[],int value){
19、
int mid=(min+max)/2;
20、
int i=0;
21、
//比较a[mid]和value
22、
if(a[mid]>value){
23、
return Dicfind(min,mid-1,a,value);
24、
}
25、
return value;
26、
}
27、
}
28、
4.同理进行a[mid]<value;a[mid]>value;a[mid]=value的出理,具体代码如下:
29、
class find{
30、
public int Dicfind(int min,int max,int a[],int value){
31、
int mid=(min+max)/2;
32、
//比较a[mid]和value
33、
if(a[mid]>value){
34、
return Dicfind(min,mid-1,a,value);
35、
} if(a[mid]<value){
36、
return Dicfind(mid+1,max,a,value);
37、
}
38、
if(a[mid]==value){
39、
System.out.println("查到这个数了:是第"+(mid+1)+"数");
40、
}
41、
return value;
42、
}
43、
}
44、
5.然后在main方法中测试一下,具体代码如下,为了方便调用我们把方法写出静态的,方便使用。执行看到效果(下图所示)!具体代码如下:
45、
package demo2;
46、
public class Test {
47、
public static void main(String[] args) {
48、
// TODO Auto-generated method stub
49、
int[] a={1,2,3,4,5};
50、
find.Dicfind(0, a.length-1, a, 2);
51、
}
52、
}
53、
class find{
54、
public static int Dicfind(int min,int max,int a[],int value){
55、
int mid=(min+max)/2;
56、
//比较a[mid]和value
57、
if(a[mid]>value){
58、
return Dicfind(min,mid-1,a,value);
59、
} if(a[mid]<value){
60、
return Dicfind(mid+1,max,a,value);
61、
}
62、
if(a[mid]==value){
63、
System.out.println("查到这个数了:是第"+(mid+1)+"数");
64、
}
65、
return -2;
66、
}
67、
}
68、
6.如果你觉得这就算完成了二分法查找这个例子的话,那你就还需要思考更多。比如,如果没有这个数怎么办,你可以在上面那个代码中测试,然后寻找问题。以下是本人思考后,对简单二分法查找数组元素的优化代码。仅供参考!
69、
package demo2;
70、
public class Test {
71、
public static void main(String[] args) {
72、
// TODO Auto-generated method stub
73、
int[] a={1,3,4,5};
74、
for(int i=0;i<6;i++){
75、
System.out.println("查找的数字"+i);
76、
find.Dicfind(0, a.length-1, a, i);
77、
}
78、
}
79、
}
80、
class find{
81、
public static int Dicfind(int min,int max,int a[],int value){
82、
if(a[0]>value||a[max]<value){
83、
System.out.println("没有这个数!");
84、
}else{
85、
int mid=(min+max)/2;
86、
//比较a[mid]和value
87、
if(a[mid]>value){
88、
return Dicfind(min,mid-1,a,value);
89、
} if(a[mid]<value){
90、
return Dicfind(mid+1,max,a,value);
91、
}
92、
if(a[mid]==value){
93、
System.out.println("查到这个数了:是第"+(mid+1)+"数");
94、
}else return value;}
95、
return value;
96、
}
97、
}
相关推荐
微信收藏文件过大无法查看怎么办
发布于2022-06-12 01:18:01 735个赞
苹果手机查找朋友位置不可用是什么情况
发布于2022-06-07 15:18:07 475个赞
苹果查找位置刷新不了
发布于2022-06-07 08:45:29 419个赞
怎样查找删除的聊天记录
发布于2022-06-05 22:44:31 307个赞
word查找替换快捷键
发布于2022-05-30 16:26:24 382个赞
查找我的iphone显示旧位置
发布于2022-05-30 12:47:11 403个赞
怎么查找一个人的位置
发布于2022-05-30 08:00:25 419个赞
wps查找在哪
发布于2022-05-26 00:02:23 278个赞
qq账号查找不到怎么办
发布于2022-05-25 10:55:34 272个赞
抖音由于对方的隐私设置无法查看
发布于2022-05-17 23:04:06 597个赞
猜你可能喜欢
鸡蛋汤面的制作方法
发布于2024-11-05 11:30:55 854个赞
翡翠白玉生煎包的制作方法
发布于2024-11-05 11:30:12 809个赞
鱼香肉丝的制作方法
发布于2024-11-05 11:29:15 790个赞
鲜掉眉毛的丸子煮干丝的制作方法
发布于2024-11-05 11:28:16 800个赞
徽酸菜鱼的制作方法
发布于2024-11-05 11:27:28 824个赞
斛参雪梨猪展汤的制作方法
发布于2024-11-05 11:26:11 790个赞
滋补鱼头豆腐汤的制作方法
发布于2024-11-05 11:25:11 797个赞
鱼头豆腐汤(九阳轻奢炒锅)的制作方法
发布于2024-11-05 11:23:55 688个赞
立功东北旧事更新时间
发布于2024-11-04 18:40:35 843个赞
《金银》在暗示什么
发布于2024-11-04 18:39:32 884个赞
点击加载更多