闲着没事,应朋友之请,花了点时间,写了个二分法快速查找的东东,欢迎大家指教!
coding如下:
——————————————————————————————————————————————————
import java.util.ArrayList;
import java.util.Arrays;
public class SemiSearch {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList a = new ArrayList();
for (int index = 0; index < intArray.length; index++) {
a.add(new Integer(intArray[index]));
}
System.out.println(a);
System.out.println("searching for number 3:");
System.out.println("the number 3 is at " + new SemiSearch().search(3));
System.out.println("searching for number 4:");
System.out.println("the number 4 is at " + new SemiSearch().search(4));
System.out.println("searching for number 6:");
System.out.println("the number 6 is at " + new SemiSearch().search(6));
System.out.println("searching for number 10:");
System.out
.println("the number 10 is at " + new SemiSearch().search(10));
System.out.println("searching for number 5:");
System.out.println("the number 5 is at " + new SemiSearch().search(5));
}
static int[] intArray = { 3, 2, 4, 6, 8, 9 };
static {
Arrays.sort(intArray);
}
static int compare(int a, int b) {
if (a > b) {
return 1;
} else if (a == b) {
return 0;
}
return -1;
}
int begin = 0, end = intArray.length - 1;
int count = 0;
int search(int i) {
int position = (begin + end + 1) / 2;
count++;
System.out.println(count + ":begin=" + begin);
System.out.println(count + ":end=" + end);
System.out.println(count + ":position=" + position);
int element = intArray[position];
int compared = compare(i, element);
System.out.println(count + ":compared=" + compared);
if (i < intArray[begin]) {
return -1;
}
if (i > intArray[end]) {
return -1;
}
if (i == intArray[begin]) {
return begin;
}
if (i == intArray[end]) {
return end;
}
if (begin == end && 0 != compared) {
return -1;
}
if (((end - begin) == 1)
&& (i != intArray[begin] && i != intArray[end])) {
return -1;
}
// System.out.println(intArray);
// int position = -1;
if (compared == 0) {
return position;
}
if (compared > 0) {
begin = position;
position = search(i);
}
if (compared < 0) {
end = position;
position = search(i);
}
return position;
}
}