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

java中常见算法2

2014-01-12 16:04 323 查看
/*二分查找原理

* @param arr 一个数组

* @param a 要查找的整数

* @return 返回查找到的数组下标,没找到则返回"-1"

*/

public int find(int [] arr,int a){

//先将数组排序

Arrays.sort(arr);

//定义开始下标,结束下标

int begin = 0;

int end = arr.length-1;

while(begin<=end){

//定义中间下标

int middle = (begin + end)/2;

if(a ==arr[middle]){

return middle;

}else if(a>middle){

begin = middle+1;

}else{

end = middle -1;

}

}

return -1;

}

/*

* 利用递归实现二分查找:

* @param arr 一个数组(该数组已经按从小到大排了序)

* @param a 要查找的整数

* @param beginIndex 数组中查找开始的下标(要在数组下标的范围之内)

* @param endIndex 数组中查找结束的下标 (要在数组下标的范围之内)

* @return 返回查找整数在数组中的位置,没有则返回-1

*/

public int halfFindByRecursion(int [] arr,int a,int beginIndex,int endIndex){

if(beginIndex>arr.length||endIndex>arr.length|beginIndex>endIndex){

throw new RuntimeException("数组下标越界");

}

if(a<arr[beginIndex]||a>arr[endIndex]){

return -1;

}

int middle = (beginIndex+endIndex)/2;

if(a==arr[middle]){

return middle;

}else if(a>arr[middle]){

//继续调用自身方法进行递归

return halfFindByRecursion(arr,a,middle+1,endIndex);

}else{

//继续调用自身方法进行递归

return halfFindByRecursion(arr,a,beginIndex,middle-1);

}

}

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