不积硅步,无以至千里,不积小流,无以致江海。
import java.util.Arrays;
//深入理解二分查找,效率远远超过 线性查找,但必须先对其排序
public class BinarySearch {
public static void main(String[] args) {
BinarySearch bs = new BinarySearch();
int[] intarray = { 34, 66, 58, 76, 96, 59, 6 };
bs.bs(intarray, 58);
}
public int bs(int[] num, int Key) {
// 第一种排序
Arrays.sort(num);
for (int i : num) {
System.out.print(i + " ");
}
// 第二种排序,效率高于第一种
/*
* System.arraycopy(num, 0, num, 0, num.length); for (int i = 0; i <
* num.length; i++) { System.out.print(num[i]+" "); }
*/
int Index = 0;// 索引值
int low = 0;// 下界
int pow = num.length;// 上界
while (true) {// 找到为止
Index = (low + pow) / 2;// 每次二分,创建中间值
if (low > pow) {// 结束条件
System.out.println("serarch error");
break;
} else {
if (num[Index] == Key) {
System.out.println();
System.out.println("find subscribe:" + Index);//输出下标
break;
} else {
if (num[Index] > Key)
pow -= 1;// 索引值大了,上限减一
else
low += 1;// 索引值小了,下限加一
}
}
}
return 0;
}
}