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);
}
}
待续.......
* @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);
}
}
待续.......
相关文章推荐
- JAVA常见算法题(十三)
- JAVA常见算法题(二十四)
- 面试10大算法汇总+常见题目解答(Java)
- 黑马程序员--02.Java语言基础--04.【数组中常见的算法】
- 常见算法学习及其Java实现--冒泡算法实现
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- java几种常见算法
- JAVA常见算法题(十四)
- Java常见排序算法之堆排序
- 常见算法之归并排序java实践
- JAVA常见算法题(三十三)---求子串在字符串中出现的次数
- JAVA常见算法题(一)
- Java算法——一维数组的常见操作(遍历,求最大值,最小值,逆序,查找)
- [面试][算法] 常见10种算法 java 实现
- 《深入理解JAVA虚拟机》学习笔记(三)JAVA垃圾收集算法和常见垃圾收集器
- 大学常见算法的java实现及思考-打印帕斯卡三角形(杨辉三角)
- JAVA常见算法题(二)
- JAVA常见算法题(十五)
- Java中的常见算法
- java常见的开源算法支持以及java默认支持的provider