疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

复习折半查找的两种实现方法


 

   

  折半查找:必须是在有序的表中进行。这是重要的一点。这折半查找提高了效率。

  1.待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围。

  2.待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围。

  一种是实现的角标;一种是直接实现的数值。

  //折半查找就是找到,必须是有序的列表。

  public class halfsearch {

  public static void mian(String args[]){

  int[]arry={1,10,51,3,4,5};

  int jg=halfSearch(arry, 2);

  System.out.print(jg);

  }

  //折半查找第一种方法

  public static int halfSearch(int[] arry,int key){

  int min=0;

  //最大的角表;

  int max=arry.length-1;

  int mid;

  while(max>min){

  mid=(min+max)/2;

  if(key>mid){

  min=mid+1;

  }

  else if(key

  max=mid=1;

  }else

  //返回的是角标

  return mid;

  }

  //不再范围内的时候就是越界反悔-1

  return -1;

  }

  //第二种方法

  public static int halfSearch_2(int[] arry,int key){

  int min=0;

  int max=arry.length-1;

  int mid=(min+max)/2;

  //比较的是中间的值和要找的值进行比较

  while(key!=arry[mid]){

  if(key>arry[mid]){

  min=mid+1;

  }else if(key

  max=mid-1;

  }

  //如果最大的值和最小的值重合以后返回-1

  else if(min>max){

  return -1;

  }

  mid=(min+max)/2;

  }

  return mid;

  }

  }