1.插值查找
插值查找相当于二分查找的进阶版,同样只适用于顺序表且有序的序列。不同之处在于middle的选取时,不是单纯的选取中间值,而是通过key的大小,middle的选取会更加接近key,使得查找的更加快速。
代码:
public static int insert_search(int array[],int key){
int l=0;
int h=array.length-1;
while(l<=h){
int middle=l+((key-array[l])/(array[h]-array[l]))*(h-l);
if(array[middle]==key){
return middle;
}else if(array[middle]>key){
h=middle-1;
}else{
l=middle+1;
}
}
return -1;
}
2.分块查找
吸取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。原理:将查找表分为若干子块。块内元素可以无序,但是块之间必须有序(前一个块的最大元素小于后一个块的所有元素)。查找步骤:找到关键字所在的块,遍历该块内所有元素找到关键字。
代码:
//index每个元素代表的是每块的最大值,
//