您的位置:首页 > 编程语言 > Java开发

Java数组与二分查找

2016-09-22 14:37 337 查看

/*

折半查找(二分查找):针对有序数组;无序数组可以使用普通的查找法。

*/

class BinarySearch

{

 public static void main(String[] args)

 {

  int[] arr = {13,15,19,28,33,45,78,106};

  System.out.println("Hello World!");

  int index = binarySearch(arr,78);

  System.out.println("index = "+index);

  int[] arr2 = {13,15,19,28,33,45,78,106};

  int index_2 = binarySearch_2(arr2,28);

  System.out.println("index_2 = "+index_2);

 }

 /*

 二分查找法

 */

 public static int binarySearch(int[] arr, int key)

 {

  int max,min,mid;

  min = 0;

  max = arr.length-1;

  mid = (min+max)/2;

  

  while(arr[mid] != key)

  {

   if(key>arr[mid])

    min = mid+1;

   else if(key<arr[mid])

    max = mid-1;

   if(max<mid)

    return -1;

   

   mid = (min+max)/2;

    

  }

  return mid;

 }

 public static int binarySearch_2(int[] arr,int key)

 {

  int max,min,mid;

  min = 0;

  max = arr.length-1;

  while(min<=max)

  {

   mid = (max+min)>>1;//通过右移运算符,实现(max+min)/2

   //右移运算符:如果是正数,在高位补零,如果是负数,则在高位补1

   //无符号右移运算符(>>>):是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0.

   if(key>arr[mid])

    min = mid+1;

   else if(key<arr[mid])

    max = mid-1;

   else

    return mid;

  }

  return -1;

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: