java 引用类型数组排序_java例程练习(引用类型数据的排序和查找)[外篇]

public class TestSort {

public static void main(String[] args) {

Date[] days = new Date[5];

//定义5个Date

days[0] = new Date(2006, 8, 6);

days[1] = new Date(2007, 4, 6);

days[2] = new Date(2008, 4, 9);

days[3] = new Date(2004, 4, 6);

days[4] = new Date(2009, 4, 5);

//要找的Date

Date d = new Date(2006, 8, 6);

//先冒泡排序

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;

int month;

int 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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值