用二分法对引用类型进行查找
首先,我们都清楚,如果想在一堆数据中进行查找的话,这些数据最好都是排好序的,这样才方便查找。
也就是说查找,一般是建立在排序的基础上,下面我们就拿上篇博文中的例子:
http://blog.csdn.net/yjjm1990/article/details/7993378
对Date这个引用类型进行查找
public class TestSearchDate{public static void main(String args[]){Date[] d=new Date[5];d[0]=new Date(2006,5,4);d[1]=new Date(2006,7,4);d[2]=new Date(2008,5,4);d[3]=new Date(2004,5,9);d[4]=new Date(2004,5,4);bubbleSort(d);for(int i=0;i<=d.length-1;i++){System.out.println(d[i]);}Date oneDate=new Date(2008,5,4);//查找这个日期中排序序列的什么位置System.out.println(Search(oneDate,d));}//用冒泡排序法,进行排序public static void bubbleSort(Date[] d){for(int i=d.length-1;i>=1;i--){for(int j=0;j<i;j++){if(d[j].Compare(d[j+1])>0){Date temp;temp=d[j];d[j]=d[j+1];d[j+1]=temp;}}}}//用二分法查找oneDate在d这个Date数组的什么位置public static int Search(Date oneDate,Date[] d){Date temp;int current;int startPos=0;int endPos=d.length-1;current=d.length/2;while(startPos<=endPos){if(oneDate.Compare(d[current])==0){return current;//找到了,返回当前的索引}else if(oneDate.Compare(d[current])>0){startPos=current+1;}else{endPos=current-1;}current=(startPos+endPos)/2;}return -1;//表示没有找到}}class Date{int year,month,day;Date(int y,int m,int d){year=y;month=m;day=d;}//定义一个比较的方法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;}}
主要看就是其中的二分法查找,我想大家一看就明白。
运行结果如下: