对数进行查找:
package jave;
/*二分查找*/
public class BinarySearch {
public static int binarySearch(int[] a, int num) {
if(a.length == 0) return -1;
int startPos = 0;
int endPos = a.length - 1;
int m = (startPos + endPos) / 2;
while(startPos <= endPos) {
if(a[m] == num) return m;
if(a[m] < num) {
startPos = m + 1;
}
if(a[m] > num) {
endPos = m - 1;
}
m = (startPos + endPos) / 2;
}
return -1;
}
public static void main(String[] args) {
int[] a = {1, 3, 6, 8, 9, 10, 12, 18, 20, 43};
int i = 12;
System.out.println(binarySearch(a, i));
}
}
对日期进行查找:
package jave;
import jave.DataSort.Date;
/*二分查找法的应用--在排好序的日期后,查找某个日期的位置*/
public class DateSearch {
public static void main(String[] args) {
Date[] days = new Date[5];
days[0] = new Date(2006, 5, 4);
days[1] = new Date(2006, 7, 4);
days[2] = new Date(2008, 5, 4);
days[3] = new Date(2004, 5, 9);
days[4] = new Date(2004, 5, 4);
bubblesort(days);
for(int i = 0; i < days.length; i++) {
System.out.println(days[i]);//将数组里的内容转换成toString输出
}
//查找d在排好序中所对应的位置
Date d= new Date(2006, 7, 4);
System.out.println( binarySearch(days, d));
}
//对日期进行冒泡排序
public static Date[] bubblesort(Date[] a) { //返回类型为数组类型
int len = a.length;
for(int i = len - 1; i >= 1; i--) {
for(int j = 0; j <= i - 1; j++) {
if((a[j].compare(a[j+1])) > 0) {
Date temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return a;
}
//二分查找法
public static int binarySearch(Date[] days, Date d) {
if(days.length == 0) return -1;
int startPos = 0;
int endPos = days.length - 1;
int m = (startPos + endPos) / 2;
while(startPos <= endPos) {
if(d.compare(days[m]) == 0) return m;
if(d.compare(days[m]) > 0) {
startPos = m + 1;
}
if(d.compare(days[m]) < 0) {
endPos = m - 1;
}
m = (startPos + endPos) / 2;
}
return -1;
}
public static class Date {
int year, month, day;
Date(int y, int m, int d){
year = y;
month = m;
day = d;
}
//比较日期大小,先看年份,年份大就返回1,否则返回-1,如果年份相等,再比较月份,以此类推
public int compare(Date date) {
return year > date.year ? 1
: year < date.year ? -1
: month > date.month ? 1
: month < date.month ? -1
: day > date.day ? 1
: day < date.day ? -1 : 0;
}
//重写toString方法
public String toString() {
return "Year:Month:Day -- " + year + "-" + month + "-" + day;
}
}
}
2006-7-4果然在下标为3的对象里。