package AL.java;
import java.util.*;
import java.util.Arrays;//sorting() and searching()
public class BinarySearch {
public static int rank(int key,int[] a) {
//算法是一系列数学转换和赋值等操作的集合
//算法有一个描述其语句实行次数最大值和计算机中空间使用(变量字节占用)的最大值
int lo = 0;
int hi = a.length - 1;
while(lo <= hi)
{
int mid = lo + (hi - lo)/2;
if(key<a[mid])
hi = mid - 1;//将最大下标放在数据集的中间元素的前面一个
else if(key>a[mid])
lo = mid + 1;
else
return mid;
}
return -1;//查找失败
}
//递归实现
//递归是个算法集,主要包括终止集,和递推集
//递推关系式一般由return语句来实现
public static int rank_2(int key,int[] a,int low,int high) {
if(key<a[low] || key>a[high] || low>high) {//防越界
return -1;//终止集:查找失败,初始系统状态:下标上下限为数组边界
}
int mid = (low + high)/2;
if(a[mid]>key) {
return rank_2(key,a,low,mid-1);
}
else if(a[mid]<key) {
return rank_2(key,a,mid+1,high);
}
else {
return mid;
}
}
public static void main(String[] args) {
int[] array = {1,3,2,7,5,4,6};
Arrays.sort(array);
System.out.println(rank(3,array));
System.out.println(rank_2(3,array,0,array.length-1));
}
}
Java 二分查找
最新推荐文章于 2023-09-12 08:06:23 发布