- import java.util.Arrays;
- /**
- *
- * @项目名称:Test
- * @类名称:BinarySearch
- * @类描述: 二分法查找
- * @创建人:Ansj
- * @创建时间:2011-9-13 下午02:53:47
- * @修改备注:
- * @version
- *
- */
- public class BinarySearch {
- public static void main(String[] args) {
- int[] ints = {12,123,21,123,1,432,23,42,3,123,124,3,5435,66,456554,435,423,42,1} ;
- int find = 66 ;
- //先对数组排序
- Arrays.sort(ints) ;
- for (int i = 0; i < ints.length; i++) {
- new BinarySearch().search(ints, ints[i]) ;
- }
- }
- public void search(int[] ints , int find){
- search(ints,0,ints.length,find) ;
- }
- public void search(int[] ints , int start , int end , int find){
- if(ints[(start+end)/2]==find){
- System.out.println((start+end)/2);
- }else if(ints[(start+end)/2] > find){
- search(ints , start , (start+end)/2 , find) ;
- }else{
- search(ints , (start+end)/2 , end , find) ;
- }
- }
- }
import java.util.Arrays;
/**
*
* @项目名称:Test
* @类名称:BinarySearch
* @类描述: 二分法查找
* @创建人:Ansj
* @创建时间:2011-9-13 下午02:53:47
* @修改备注:
* @version
*
*/
public class BinarySearch {
public static void main(String[] args) {
int[] ints = {12,123,21,123,1,432,23,42,3,123,124,3,5435,66,456554,435,423,42,1} ;
int find = 66 ;
//先对数组排序
Arrays.sort(ints) ;
for (int i = 0; i < ints.length; i++) {
new BinarySearch().search(ints, ints[i]) ;
}
}
public void search(int[] ints , int find){
search(ints,0,ints.length,find) ;
}
public void search(int[] ints , int start , int end , int find){
if(ints[(start+end)/2]==find){
System.out.println((start+end)/2);
}else if(ints[(start+end)/2] > find){
search(ints , start , (start+end)/2 , find) ;
}else{
search(ints , (start+end)/2 , end , find) ;
}
还 你的二分法当赋值给find的参数 在数组ints里没有的话,就会报异常,我把你的程序改了下 就能用了 谢谢!
public static void main(String[] args) {
int[] ints = { 12, 12, 11, 9, 10, 5, 7, 1, 1 };
int start = 0;
int end = ints.length;
int find = 5;
// 先对数组排序
Arrays.sort(ints);
new Test().search(ints, start, end, find);
}
public int search(int[] ints, int start, int end, int find) {
int flag = 0;
if (ints[(start + end) / 2] == find) {
System.out.println(ints[(start + end) / 2]);
flag = 1;
return flag;
} else if ((end - start) <= 1) {
if (ints[start] == find) {
System.out.println(ints[start]);
flag = 1;
return flag;
} else if (ints[end] == find) {
System.out.println(ints[end]);
flag = 1;
return flag;
} else {
flag = 0;
return flag;
}
} else if (ints[(start + end) / 2] > find) {
if (start < (start + end) / 2) {
end = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}
} else {
if ((start + end) / 2 < end) {
start = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}
}
return flag;
}
其实很早以前写过..这次想用递归写还是没写好..一次写完也没仔细测呵呵..谢谢你提的意见...
这是标准的二分代码..和jdk写的一样
public static void main(String[] args) {
int[] ints = { 12, 12, 11, 9, 10, 5, 7, 1, 1 };
int start = 0;
int end = ints.length;
int find = 5;
// 先对数组排序
Arrays.sort(ints);
new Test().search(ints, start, end, find);
}
public int search(int[] ints, int start, int end, int find) {
int flag = 0;
if (ints[(start + end) / 2] == find) {
System.out.println(ints[(start + end) / 2]);
flag = 1;
return flag;
} else if ((end - start) <= 1) {
if (ints[start] == find) {
System.out.println(ints[start]);
flag = 1;
return flag;
} else if (ints[end] == find) {
System.out.println(ints[end]);
flag = 1;
return flag;
} else {
flag = 0;
return flag;
}
} else if (ints[(start + end) / 2] > find) {
if (start < (start + end) / 2) {
end = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}
} else {
if ((start + end) / 2 < end) {
start = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}
}
return flag;
}