二分法就是用折半的思想。
屁话不多说,上源码!!!!!
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=0,max=mid-1,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;
}
}