一、顺序查找(Sequential Search)
顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术。
顺序查找的过程:从表中第一个( 或最后一个)开始,逐个记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果知道最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。
代码实现:
/**
* 顺序查找
* @param arr 数组
* @param key 要查找的数
* @return 返回找的值的索引,没找到返回 -1
*/
public int Sequential_Search(int[] arr,int key){
int i;
for( i = 0 ; i < arr.length ; i++ ){
if(arr[i] == key){
return i;
}
}
return -1;
}
}
以上代买为最简单的顺序查找,但并不完美,因为每次循环都要判断 i 是否越界,我们可以使用一个更好的办法,设置一个哨兵,这样就不需要每次都让 i 与 arr.length 比较。
/**
* 顺序查找--优化
* @param arr 数组
* @param key 要找的值
* @return 返回索引,为找到返回 -1
*/
public int Sequential_Search(int[] arr,int key){
int i;
i = arr.length-1;
int first = arr[0]; // 将第一位数给first,以便后边比较使用
arr[0] = key; // 设置arr[0]为关键字,即“哨兵”
while(arr[i] != key){
i--;
}
//因为key占用了arr[0]的位置,所以如果i=0时,需判断此时是否相等
if(i == 0){
if(first == key)
return i; //相等返回索引
else
return -1; // 不等返回 -1,即未找到