二分查找递归
新学期开始差不多一个月了,并没有学到些什么,算法老师布置的作业一如既往的难,现在开始写一下二分查找吧
二分查找在我看来就是不断缩小寻找区间的过程,注意,二分查找只能用于查找按照顺序排序的数,最近学了递归,所以用的是递归的方法,有错误的地方恳请纠正。
package BinarySearch; import java.util.Scanner; public class BinarySearch { public static int rank(int key,int[]a){ return rank(key,a,0,a.length-1); }//给各个变量赋初值 public static int rank(int key,int[]a,int lo,int hi) { if(lo>hi)return -1; int mid=lo+(hi-lo)/2;//算法老师说这个样子最好,免得会产生溢出,其实大部分情况都不会溢出,但是算法课就是为了找到最优方法,所以就选用这个式子来算mid,有些程序写的是(lo+hi)/2,(lo+hi)的结果是变大的方向,而此处的(hi-lo)的结果在变小,可以有效防止溢出。 if(key<a[mid]) return rank(key,a,lo,mid-1); else if(key>a[mid]) return rank(key,a,mid+1,hi); else { System.out.println(mid); return mid;} } public static void main(String[] args) { int[]a={1,3,4,6,7,8,11,19,21,29}; Scanner in=new Scanner(System.in); int num=in.nextInt(); System.out.println("输入数据:"); rank(num,a); } }其实递归时一种很浪费储存空间的方法,它每返回一次,就会打开一个新的函数体,但是无递归就无算法,这个算是我初次运用递归了,针对二分查找法,这个方法不是很好。
加油,顾漂亮,祝你的人生也活得很漂亮!