public class Main {
public static void main(String[] args) {
/*
实现指定整数的三种查询方法:
int linear_search( int arr[], int len, int key )
int better_search( int arr[], int len, int key )
int sentinel_linear_search( int arr[], int len, int key )
返回key在数组arr中的位置,key不在arr中则返回-1。len是数组arr的长度。
**/
int key = 48;
int[] arr = new int[]{88, 99, 12, 48, 55, 68, 48, 95, 33};
int result1 = linear_search(arr, arr.length, key);
int result2 = better_search(arr, arr.length, key);
int result3 = sentinel_linear_search(arr, arr.length, key);
System.out.println(result1+"\n"+result2+"\n"+result3);
}
public static int linear_search(int arr[], int len, int key) {
int pos = -1;
for (int i = 0; i < len; i++) {
if (arr[i] == key) {
pos= i;
}
}
return pos;
}//注:该算法效果是若查找的数组中有重复元素,则返回最后一个目标值的下标
static int better_search(int arr[], int len, int key) {
for (int i = 0; i < len; i++) {
if (arr[i]==key){
return i;
}
}
return -1;
}//注:这个算法的效果是发现目标值就返回下标,当数组中有重复元素时,返回第一个元素的下标
static int sentinel_linear_search(int arr[], int len, int key) {
int temp=arr[len-1];
arr[len-1]=key;
int pos = -1;
for (int i = 0; i < len; i++) {
if (arr[i]==key) {
pos = i;
break;
}
}
arr[len-1]=temp;
if (pos<len-1||temp==key)
return pos;
return -1;
}//注:该算法相对保险一些,避免了访问越界,效果是在有重复元素的情况下返回第一个元素的下标
}
算法分析与设计-----查找算法
最新推荐文章于 2023-03-16 22:49:52 发布