折半查找
l 查找过程:每次将待查记录所在区间缩小一半
l 适用条件:必须采用顺序存储结构的有序表
l 算法实现
u 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值
u 初始时,令low=1,high=n,mid=ë(low+high)/2û
u 让k与mid指向的记录比较
u 若k==r[mid].key,查找成功
u 若k<r[mid].key,则high=mid-1
u 若k>r[mid].key,则low=mid+1
u 重复上述操作,直至low>high时,查找失败
算法描述
package com.robin.find;
public class HalfFind {
public static int halffind(int[]data, int indexData){
int low = 0;
int high = data.length-1;
while(low <= high){
//int mid = (high + low) / 2;
int mid = low + (high - low)/2; //编程之美上推荐这种写法,可以防止数据溢出。
if(data[mid] == indexData){
return mid;
}else{
if(data[mid] > indexData){
high = mid - 1;
}else{
low = mid + 1;
}
}
}
return low;
}
public static void main(String[] args) {
int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7,10 };
int index = halffind(data, 10);
System.out.println(index);
}
}