リニアテーブルルックアップ(シーケンスルックアップ、二分ルックアップ)
1853 ワード
1、順序検索(無秩序)2、折半検索(秩序配列でなければならない)
実装コード(java)
実装コード(java)
public class lineSearch {
//
public static void main(String[] args) {
//
int[] arr1 = {34,76,23,98,87,35,8,32,74,44};
int key = 8;
System.out.println(key+" :"+search(arr1,8));//6
// ( )
int[] arr2 = {1,2,3,4,5,6,7,8,9,10};
//
System.out.println(key+" :"+myBinarySearch(arr2,8));//7
//
System.out.println(key+" :"+myBinarySearch2(arr2,8));//7
}
/**
* :T(n) = O(logn)
* :S(n) = O(logn)
*
* @param arr
* @param key
* @return
*/
private static int myBinarySearch2(int[] arr, int key) {
int low = 0;
int high = arr.length;
return binarySearch(arr,key,low,high);
}
//
private static int binarySearch(int[] arr, int key,int low,int high) {
int mid = (low+high)/2;
if(key == arr[mid]){
return mid;
}else if(key < arr[mid]){
return binarySearch(arr,key,low,mid -1);
}else if(key > arr[mid]){
return binarySearch(arr,key,mid+1,high);
}
return -1;
}
/**
* : T(n) = O(logn)
* :S(n) = O(1)
*
* @param arr
* @param key
* @return
*/
private static int myBinarySearch(int[] arr, int key) {
int low = 0;
int high = arr.length;
int mid = 0;
while(low<=high){
mid = (high + low)/2;
if(key == arr[mid]){
return mid;
}else if (key