java数组之二分查找法(折半查找)

来源:互联网 发布:充电宝推荐 知乎 编辑:程序博客网 时间:2024/06/05 06:19

二分法就是用折半的思想。

屁话不多说,上源码!!!!!


public class BinarySearch {


/**
* 二分查找法:折半
* 折半查找

* 使用条件:
* 必须是有序数组

* 需要三个变量:
* int min=0  int max=数组.length  int mid=(min+max)/2

* 结束条件
* min<=max

* 思路:
* 让被查找的元素,和中间元素进行比较
* 如果:被查找元素 > 中间元素,则把中间元素及其前面较小的元素都舍去掉(即不管,不关注),
* 则min=mid+1,max不变,mid=(min+max)/2

* 否则如果:被查找元素<中间元素,则把中间元素及其后面较大的元素都舍去掉(即不管,不关注)
* 则min=mid-1,max不变,mid=(min+max)/2
*
* 否则如果:被查找元素==中间元素,查找到了元素,结束
*
* 否则:查找不到要查找的元素
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr1= {1,4,8,10,12,17,22,28,33,40,43,66};
int index=binarySearch(arr1,28);
System.out.println(index);
}


/**

* @param arg
* @param key:表示我要查找的数组
*/
public static int binarySearch(int[] arg,int key) {
int min=0;
int max=arg.length;
int mid;
//折半查找
while(min<=max) {

//mid代表数组中间的索引
mid=(min+max)/2;

if(key>arg[mid]) {//被查找元素大于中间元素
min=mid+1;
}else if(key < arg[mid]){//被查找元素<中间元素
max=mid-1;
}else {//其它情况都结束(其实就是被查找元素==中间元素)
return mid;
}
}
return -1;
}
}


原创粉丝点击