我们在编程过程中总会涉及一些算法问题,然而多数JAVA程序员都很难在算法方面进行突破,很明显的列子就是我了,做了这么多年的程序开发,自己的算法还是一塌糊涂,所以今天开始,对算法准备进行突破,然而为了表示自己的每天在算法上的进步,所以,我想把每个点滴给写下来:
今天我没事就写了一个二分法查找的算法,OK,首先我们要对其进行分析,在查找算法中, 二分法查找算法的效力还是很高,我写个简单的列子来对比一下吧,比如我们使用之基本的算法方式来进行查找数组中的某个数,代码如下:
public class SearchDemo{
public static void main(String args[]){
//基本查询方式:请详细看注释
int[] baseData = new int[]{2,3,4,5,6,3,2,3,4,5,6,7,8,343,2323,23,2,23,211,23,2,23};//条件数组
int index = 23;//所需查找的数据
baseSearch(baseData,index);//对其基本的方法进行测试
System.out.println("-----------------------------");
//使用二分法进行查找,详细看注释
int[] bearSearch = new int[]{3,23,3,4,4,53,32,23,23,23,23,23,23,23,23,23,3,3,5,53,5,5,45,54,45,34,43};
int index 54;
bearSearch(bearSearch,index);
}
//这个方法是最基本的查询方式,这种查询方法相对来说性能会很差的,比如说,如果我们要查询的数字才我100万的位置,此时,我们使用这种方法可能需要查找100万次,也就是说这种查询方式会挨个按顺序进行查询,所以是不推介使用的
public static int baseSearch(int[] arr,int index){
for(int i = 0;i<arr.length;i++){
if(arr[i] == index){
return index;
}
}
return -1;
}
//这个方法使用二分查找法,相对来说解决了上面多数据时的查找所存在的问题,也就是在多数据时相对减少了查询次数,并优化了查找的方式
public static int bearSearch(int[] arr,int index){
int low = 0; //声明一个INT变量来表示数组的最小的小标值并初始化为0
int hight = 0; //声明一个INT变量来表示数组的最大下标值并对其初始化为0
int middle = 0; //声明一个INT变量来表示数组的中间数并对其初始化为0
while(low < hight){
middle = (low + hight) / 2;//对middle来进行中值设置
if(arr[middle] == index){
return middle;//如果第一次查找到的话就直接返回
}
if(index < arr[middle]){
hight = middle - 1;//如果一次查找的值小于其中值的话,我们就需要抛弃其中值之后的数值,在依次继续以中值的方式来进行查找
}
if(index > arr[middle]){
low = middle + 1;//如果查找的值大于其中值的话,我们就需要抛弃其中值之前的所有数值,再依次继续以中值的方式来进行查找
}
}
return -1;//判断如果没有查找的对其返回处理
}
}
好了以上就是关于使用二分法查找的算法代码与注释详解,如有问题可来电询问:jiangshide@hotmail.com