查找的基本概念
根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素或(记录)
- 关键字 用来标识一个数据元素或(记录)的某个数据项的值
- 主关键字:可唯一地标识一个记录地关键字是主关键字
- 次关键字 :反之,用以识别若干记录的关键字是次 关键字
顺序查找
算法7.1其他表现形式:
设置监视哨的顺序查找
时间效率分析:
比较次数与key位置有关:
**
- 查找第i个元素,需要比较n-i+1次
- 查找失败,需要比较n+1次**
当ST.length较大时,此改进能使进行一次查找所需要的时间几乎减少一半
查找概率越高的元素放在靠后的位置
查找概率越低的元素放在靠前的位置
顺序查找的特点
优点:算法简单,逻辑次序无要求,且不同存储结构均适用。
缺点:ASL太长,时间效率太低。
折半查找(二分或对分查找)
折半查找:每次将待查记录所在区间缩小一半
折半查找的非递归算法
折半查找的递归算法
public static int binaryDiGuiSearch(int[] data,int low,int high,int x) {undefined
if(low>high){undefined
return -1;
}
int mid=(low+high)/2;
if(x==data[mid]){
return mid;
}else if(x<data[mid]){
return binaryDiGuiSearch( data,low,mid-1,x);
}else {
return binaryDiGuiSearch( data,mid+1,high,x);
}
折半查找优点 :效率比顺序查找高
折半查找缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)
分块查找(索引顺序查找)
分块查找优缺点