1.顺序查找
顺序表与链表都适用,将关键字与表中元素依次比较,直到找出与关键字相同的元素,效率比较低。
查找的平均长度:(n+1)/2
代码:
public static int direct_search(int array[],int key){
for(int i=0;i<array.length;i++){
if(key==array[i]){
return i;
}
}
return -1;
}
2.折半查找
因为折半查找需要方便的定位查找区域,所以他要求线性表必须具有随机存取的特征。因此折半查找法只适用于顺序储存结构,不适合于链式储存结构,且要求元素有序排列。
原理:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
查找的平均长度:约为log₂(n+1)-1
代码:
public static int binary_search(int array[],int key){
int l=0;
int h=array.length;
while(l<=h){
int middle=(h+l)/2;
if(array[middle]==key){
return middle;
}else if(array[middle]>key){
h=middle-1;
}else{
l=middle+1;
}
}
return -1;
}