java作业 任意初始化一个days数组,然后对days的元素排序,在用折半查找法查找特定的Date对象day;

先使用 冒泡排序法 然后再用折半查找法 查找特定的Date对象

public class Test {

public static void main(String[] args) {

Date date1= new Date(2010, 1, 2);

int day1 = date1.getDay();

Date date2= new Date(2011, 4, 20);

int day2 =date2.getDay();

Date date3 = new Date(2016, 4, 8);

int day3 = date3.getDay();

int[] days = {day1,day2,day3};

printArray(days);

sort(days);

System.out.print("排序后:");
printArray(days);

Date date = new Date(2017, 04, 20);

int index = binarySearch(days, date);

System.out.println("查找"+date.getDay()+"的位置为:"+index);

}

public static void printArray(int[] days) { 

for (int i = 0; i < days.length; i++) {

System.out.print(days[i] +" ");

}
}
public static void sort(int[] array){  //用冒泡排序来排数组

for (int i = 0; i < array.length; i++) {

for (int j = 0; j < array.length-1-i; j++) {

if (array[j]>array[j+1]) {

int temp;

temp = array[j];

array[j] = array[j+1];

array[j+1] = temp;

}
}
}
}



public static int binarySearch(int[] arr,Date date){ //折半查找

   int len =arr.length;
   
   int low=0,high=len-1,mid;
   
   mid=(low+high)/2;
   
while (arr[mid]!=date.getDay()) {

if (arr[mid]>date.getDay()) {

high=mid-1;

}else if (arr[mid]<date.getDay()) {

low=mid + 1;
}

if (low>high) {

return -1;

}

mid = (low+high)/2;

}

return mid;

}

}



public class Date {

private int year;

private int month;

private int day;

public Date(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}

public int getYear() {
return year;
}

public void setYear(int year) {
this.year = year;
}

public int getMonth() {
return month;
}

public void setMonth(int month) {
this.month = month;
}

public int getDay() {
return day;
}

public void setDay(int day) {
this.day = day;
}
}
//输出结果:
2 20 8 排序后:2 8 20 查找20的位置为:2

追问

老师要求 年月日一起比较 然后再折半查找。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-04-07
贴上源码,回来可能试试

~~~~~~~~~~~~~~
相似回答