Chinaunix首页 | 论坛 | 博客
  • 博客访问: 616109
  • 博文数量: 87
  • 博客积分: 3399
  • 博客等级: 中校
  • 技术积分: 1422
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 21:20
文章分类

全部博文(87)

文章存档

2013年(1)

2012年(51)

2011年(33)

2010年(2)

分类: Java

2012-05-04 17:17:27


点击(此处)折叠或打开

  1. /******************************************************
  2.  * @package
  3.  * @file Test.java
  4.  * @author Shengwuya(shengwuya@gmail.com)
  5.  * @date 2012-5-4 下午5:00:33
  6.  * @version 1.0
  7.  * @brief 改写的二分查找算法
  8.  * 当x在数组中时,ind[0]=ind[1]=middle,返回x的位置
  9.  * 当x不在数组中时,ind[0]返回小于x的最大元素位置
  10.  * ind[1]返回大于x的最小元素的位置
  11.  ******************************************************/
  12. public class Test{
  13.     public static boolean binarySearch(int[] a, int x, int left, int right, int[] ind){
  14.         int middle;
  15.         while(left < right){
  16.             middle = (left+right)/2;
  17.             if(x == a[middle]){
  18.                 ind[0] = ind[1] = middle;
  19.                 return true;
  20.             }
  21.             else if(x > a[middle])
  22.                 left = middle +1;
  23.             else
  24.                 right = middle -1;
  25.         }
  26.         ind[0] = right;//小于x的最大元素位置

  27.         ind[1] = left; //大于x的最小元素的位置

  28.         return false;        
  29.     }    
  30.     public static void main(String[] args){
  31.         int arr[] = {1,2,4,5};
  32.         int ind[]={-1,-1};
  33.         binarySearch(arr, 3, 0, 3,ind);
  34.         System.out.println(ind[0]);
  35.         System.out.println(ind[1]);
  36.     }
  37. }

阅读(987) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~