public class TestDateSort {
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);

Date d = new Date(2006, 7, 4);
String str = String.valueOf(d);
//str = d.toString();
bubbleSort(days);

for(int i=0; i<days.length; i++) {
System.out.println(days[i]);
}

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;
    }
}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;
  }
  
  public String toString() {
   return "Year:Month:Day -- " + year + "-" + month + "-" + day;
  }
}虽然在各位严重也许是很基础的东西但是对于新手来说还是有点迷糊 之前发过帖子 没有贴全部代码  希望这次大哥大姐能给个深度解析 现在正在看数组算法的部分 看的很乱  有点不明白 

解决方案 »

  1.   

    看着很乱的话,就加个断点单步调试,跟着程序一步一步走,走一遍就不乱了。
    public class TestDateSort {
    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); Date d = new Date(2006, 7, 4);
    String str = String.valueOf(d);
    // str = d.toString();
    bubbleSort(days); for (int i = 0; i < days.length; i++) {
    System.out.println(days[i]);
    } 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;
    }
    }class Date {
    int year, month, day; Date(int y, int m, int d) {
    year = y;
    month = m;
    day = d;
    } public int compare(Date date) {//我估计你感觉乱的地方应该是这里,这其实就是比较两个Date的大小的方法,前者大就返回1,小就返回-1,相等就返回0
    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;
    //等价于:
    /*if (year > date.year)//先比较年
    return 1;
    else if (year < date.year)
    return -1;
    else if (month > date.month)//年相等,再比较月
    return 1;
    else if (month < date.month)
    return -1;
    else if (day > date.day)//月也相等,在比较日
    return 1;
    else if (day < date.day)
    return -1;
    else
    return 0;*/
    } public String toString() {
    return "Year:Month:Day -- " + year + "-" + month + "-" + day;
    }
    }
      

  2.   

    这不就是个二分查找的例子嘛。看看二分查找算法,理解它就完啦,只不过你这里是用日期来比较而已如果你只是为了学算法,这个例子就不合适,应该找个int类型的数组来学下网上很多这样的例子。而且二分查找思路非常简单,算法也简单,唯一的一点想要用二分查找,就必须先排序!所以我们还得学习排序的算法,呵呵~~~~ 慢慢来吧
      

  3.   

    唯一的一点想要用二分查找,就必须先排序!说得有点问题,如果数组本来就是有序的,就不需要排了,当然排序的话也并不一定需要自己排,对于绝大多数的数据,用java自身提供的对数组排序的功能就能满足,当然查找java也提供了