最近开始迷上了算法,之前对算法的关注一直不够,决定开始专注算法的学习,准备开始连载《算法》与《算法导论》的学习过程,希望现在才开始学习算法还不算晚.
之前学习的时候,自己写的二分法查找的的代码:
public static int binarySearch(int[] arr, int key){
//定义三个指针变量
int min = 0 ;
int max = arr.length -1 ;
int mid = 0;
//循环折半,条件 min<=max
while( min <= max){
//公式,计算中间索引
mid = (min+max)/2;
//让被找元素,和中间索引元素进行比较
if(key > arr[mid]){
min = mid + 1;
}else if (key < arr[mid]){
max = mid - 1;
}else{
//找到元素,返回元素索引
return mid;
}
}
虽然二分法的思路与自己写的程序的思路一样,但是看到书中写的简洁,感觉还有有必要重写一遍:
public static int indexOf(int[] a, int key) {
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}