import java.util.Arrays;
public class SearchTest01 {
/**
* 迭代式 ------ 二分查找
* @param num
* @param data
* @return
*/
public static boolean bin_search(int[] num ,int data){
int left = 0;
int right = num.length-1;
while (left < right){
int mid = (left+right)/2;
if (data > num[mid])
left = mid+1;
else if(data < num[mid])
right = mid-1;
else
return true;
}
return false;
}
/**
* 递归式:二分
* @param num
* @param data
* @param left
* @param right
* @return
*/
public static boolean bin_search(int[] num,int data,int left,int right){
int mid = (left + right)/2;
if (data > num[mid])
bin_search(num,data,mid+1,right);
else if (data < num[mid])
bin_search(num,data,left,mid-1);
else
return true;
return false;
}
/**
* 插值查找: 基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,差值查找也属于有序查找。
* @param num
* @param data
* @param left
* @param right
* @return
*/
public static boolean InsertionSearch(int[] num , int data ,int left , int right){
int mid = left + (data-num[left])/(num[right]-num[left])*(right-left);
if (num[mid] == data)
return true;
else if (num[mid] > data)
InsertionSearch(num,data,left,mid-1);
else
InsertionSearch(num,data,mid+1,right);
return false;
}
public static void main(String[] args) {
int[] num = new int[10];
for (int i = 10 , j =0; i > 0; i--,j++)
num[j] = i;
Arrays.sort(num);
for (int i : num)
System.out.print(i + " ");
System.out.println();
System.out.println(InsertionSearch(num,5,0,num.length-1));
System.out.println(bin_search(num,5));
System.out.println(bin_search(num,5,0,num.length-1));
}
}