二分查找法
2016-04-08 23:37
302 查看
查找:
基本查找:数组元素无序(从头找到尾)
二分查找(折半查找):数组元素有序
分析:
A:定义最大索引,最小索引
B:计算出中间索引
C:拿中间索引的值和要查找的值进行比较
相等:就返回当前的中间索引
不相等:
大 左边找
小 右边找
D:重新计算出中间索引
大 左边找
max= mid - 1;
小 右边找
min= mid + 1;
E:回到B
二分法查找原理图:
二分法代码的实现:
/*
* 查找:
* 基本查找:数组元素无序(从头找到尾)
* 二分查找(折半查找):数组元素有序
*
* 分析:
* A:定义最大索引,最小索引
* B:计算出中间索引
* C:拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大
左边找
* 小
右边找
* D:重新计算出中间索引
* 大
左边找
* max= mid - 1;
* 小
右边找
* min= mid + 1;
* E:回到B
*/
public
classArrayDemo {
public
static void main(String[]
args) {
//定义一个数组
int[]
arr ={11,22,33,44,55,66,77};
//写功能实现
int
index = getIndex(arr, 33);
System.out.println("index:"+index);
//假如这个元素不存在后有什么现象呢?
index = getIndex(arr, 333);
System.out.println("index:"+index);
}
/*
* 两个明确:
* 返回值类型:int
* 参数列表:int[]
arr,int value
*/
public
static int getIndex(int[]
arr,int
value){
//定义最大索引,最小索引
int
max = arr.length -1;
int
min = 0;
//计算出中间索引
int
mid = (max +min)/2;
//拿中间索引的值和要查找的值进行比较
while(arr[mid] !=
value){
if(arr[mid]>value){
max =
mid - 1;
}else
if(arr[mid]<value){
min =
mid + 1;
}
//加入判断
if(min >
max){
return -1;
}
mid = (max +min)/2;
}
return
mid;
}
}
运行结果:
index:2
index:-1
基本查找:数组元素无序(从头找到尾)
二分查找(折半查找):数组元素有序
分析:
A:定义最大索引,最小索引
B:计算出中间索引
C:拿中间索引的值和要查找的值进行比较
相等:就返回当前的中间索引
不相等:
大 左边找
小 右边找
D:重新计算出中间索引
大 左边找
max= mid - 1;
小 右边找
min= mid + 1;
E:回到B
二分法查找原理图:
二分法代码的实现:
/*
* 查找:
* 基本查找:数组元素无序(从头找到尾)
* 二分查找(折半查找):数组元素有序
*
* 分析:
* A:定义最大索引,最小索引
* B:计算出中间索引
* C:拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大
左边找
* 小
右边找
* D:重新计算出中间索引
* 大
左边找
* max= mid - 1;
* 小
右边找
* min= mid + 1;
* E:回到B
*/
public
classArrayDemo {
public
static void main(String[]
args) {
//定义一个数组
int[]
arr ={11,22,33,44,55,66,77};
//写功能实现
int
index = getIndex(arr, 33);
System.out.println("index:"+index);
//假如这个元素不存在后有什么现象呢?
index = getIndex(arr, 333);
System.out.println("index:"+index);
}
/*
* 两个明确:
* 返回值类型:int
* 参数列表:int[]
arr,int value
*/
public
static int getIndex(int[]
arr,int
value){
//定义最大索引,最小索引
int
max = arr.length -1;
int
min = 0;
//计算出中间索引
int
mid = (max +min)/2;
//拿中间索引的值和要查找的值进行比较
while(arr[mid] !=
value){
if(arr[mid]>value){
max =
mid - 1;
}else
if(arr[mid]<value){
min =
mid + 1;
}
//加入判断
if(min >
max){
return -1;
}
mid = (max +min)/2;
}
return
mid;
}
}
运行结果:
index:2
index:-1
相关文章推荐
- awk命令详解
- C#开发微信门户及应用(30)--消息的群发处理和预览功能
- java对象的强引用,软引用,弱引用和虚引用
- kvm 虚拟化概述及 virt-manager 安装虚拟机
- Xcode,OS X(SDK),iOS(SDK)版本对应
- java web中servlet、jsp、html 互相访问的路径问题。
- 选择排序法
- mybatis关系映射之一对多和多对一
- 汉堡包评价
- 非关系型数据库中的「关系」实现
- 位运算-不用加减乘除做加法。
- 2016年4月7号渗透学习总结
- <SLAM for Dummies>阅读笔记
- 冒泡排序法
- 文件编程
- Hadoop学习四:hadoop分布式环境搭建
- 笔记练习:《Javascript入门经典(第5版)》page115_9.9_Practice
- Apache CAS部署在tomcat上实现单点登录
- 百思不得姐之新帖(四)
- [android] 手机卫士自定义对话框布局