二分查找前提:要查找的序列必须是有序的,如果要查找的元素在數組中是重複的,則不能保證最後找到是哪一個
Scala 版的
// lines是字典表array(起始ip,终止ip,ip所在省份) ip是要查找的东西
def binarySearch(lines: Array[(String, String, String)], ip: Long) : Int = {
var low = 0
var high = lines.length - 1
while (low <= high) {
val middle = (low + high) / 2 // 先将字典折半,缩减查找范围
if ((ip >= lines(middle)._1.toLong) && (ip <= lines(middle)._2.toLong)) //如果要查的ip刚好在这个范围内,就返回 下标
return middle
if (ip < lines(middle)._1.toLong) //如果ip比字典折半后,还要小
//就将折半的下标再减1 缩小查找范围(现在范围就是 0~middle-1),缩小完范围之后还是用折半的方法继续查
high = middle - 1
else { //否则,如果ip比字典折半后,还要大
//就将折半的下标再加1, 缩小查找范围(现在范围就是 middle+1~ lines.length - 1),缩小完范围之后还是用折半的方法继续查
low = middle + 1
}
}
-1
}
Java 第一版
int[] a = {
11,22,33,44,55,66,77}; //有序的
System.out.println