java递归之--二分查找

来源:互联网 发布:淘宝联盟怎么使用教程 编辑:程序博客网 时间:2024/06/05 04:48
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

package test;
/**
 * 二分查找法
 * 弊端:
 * 1、必须采取顺序存储结构
 * 2、必须按关键字大小有序排列(个人理解:只对数字好用--用处相对较小)
 * @author Super
 */
public class Test2 {
          public static void main(String[] args){
          //String 类型数组排序去重
           /*String [] array=new String[]{"a","2","1","f","4","8","6","5","7","3","7","5"};
                   Set <String> set = new HashSet<String>();
                   set.addAll(Arrays.asList(array));
                   Arrays.sort(set.toArray());
                   for(Object a:str){
                             System.out.println(a);
                   }*/
          //int类型数组排序去重
           /*Integer [] a= new Integer []{3,2,1,4,5,4,8,5,78,0,9,10};
                   Set<Integer> set = new HashSet<Integer>();
                   set.addAll(Arrays.asList(a));
                   Arrays.sort(set.toArray());*/
                   int[] a=new int[]{0,1,2,3,4,5,6,7,8,9};
                   int min=0;
                   int max=a.length-1;
                   System.out.println(getArray(a, 7, min, max));
          }
          //非递归算法
          /*public static int getArray(int [] array,int index,int min,int max){
                   int tmp = (min+max)/2;
                   while(min<=max){
                       if(index==array[tmp]){
                          return tmp;
                       }else if(index<array[tmp]){
                                return max=tmp-1;
                             }else{
                                return min=tmp+1;
                             }
                   }
                   return -1;
          } */
          //递归算法
          public static int getArray(int[] array,intindex,int min,intmax){
                   inttmp = (min+max)>>1;
                   if(min<=max){
                       if(index==array[tmp]){
                          return tmp;
                       }else if (index<array[tmp]){
                          return getArray(array, index, min, tmp-1);
                       }else{
                          return getArray(array, index, tmp+1, max);
                       }
                   }
                   return-1;

          }
}