准备一个长度是9的日期数组 使用1970年-2000年之间的随机日期初始化该数组 按照这些日期的时间进行升序排序 比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:

准备一个长度是9的日期数组使用1970年-2000年之间的随机日期初始化该数组按照这些日期的时间进行升序排序比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大

public class Ceshi {

	// 生成随机时间
	public Date gettime() {
		Date time = new Date();
		long day = 24 * 60 * 60 * 1000;
		long mills = (2000 - 1970) * 365 * day + (2000 - 1970) / 4 * day - day / 3;
		return new Date((long) (Math.random() * mills));
	}

	// 时间比较,time1大于2就返回true,不返回数据是为了便于比较完成后交换位置
	public boolean compare(Date time1, Date time2) {
		char[] A = new SimpleDateFormat("HH:mm:ss").format(time1).toCharArray();
		char[] B = new SimpleDateFormat("HH:mm:ss").format(time2).toCharArray();
		for (int i = 0; i < A.length; i++) {
			if (A[i] > B[i]) {
				return true;
			}
			if (A[i] < B[i]) {
				return false;
			} else {
				continue;
			}
		}
		return false;
	}

	// 数字转换为字符串
	public String changeDatetoString(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String str = sdf.format(date);
		return str;
	}
	//快速排序算法
	public Date[] kspx(Date[] timeOfnine,int start,int end) {
		Date con=timeOfnine[start];
		int i=start;
		int j=end;
		
		//一遍快速排序
		while(i<j){
			while((i<j)&&compare(timeOfnine[j],con)) {
				j--;
			}
			while((i<j)&&compare(con,timeOfnine[i])) {
				i++;
			}
			if ((i<j)&&(timeOfnine[i].equals(timeOfnine[j]))) {
				i++;
			} else {
				Date cn=timeOfnine[i];
				timeOfnine[i]=timeOfnine[j];
				timeOfnine[j]=cn;
			}
		}
		
		//多次排序
		if(i-1>start) kspx(timeOfnine,start,i-1);
		if(j+1<end) kspx(timeOfnine,j+1,end);	
		return timeOfnine;
	}

	public static void main(String[] args) {
		Ceshi h = new Ceshi();
		Date[] timeOfnine = new Date[9];
		for (int i = 0; i < 9; i++) {
			timeOfnine[i] = h.gettime();
		}

		System.out.println("随机时间有:");
		for (int k = 0; k < 9; k++) {
			System.out.print(h.changeDatetoString(timeOfnine[k]) + "   ");
			if ((k + 1) % 3 == 0) {
				System.out.println();
			}
		}
		
		System.out.println("快速排序法排序后的时间有:");
		//快速排序法
		for (int i = 0; i < 9; i++) {
			System.out.print(h.changeDatetoString(h.kspx(timeOfnine,0,8)[i]) + "   ");
			if ((i + 1) % 3 == 0) {
				System.out.println();
			}
		}

		System.out.println("冒泡法排序后的时间有:");
		// 冒泡法
		Date c;
		for (int j = 0; j < 8; j++) {
			for (int i = 0; i <8-j; i++) {
				if (h.compare(timeOfnine[i], timeOfnine[i + 1])) {
					c = timeOfnine[i];
					timeOfnine[i] = timeOfnine[i + 1];
					timeOfnine[i + 1] = c;
				}
			}
		}
		
		for (int k = 0; k < 9; k++) {
			System.out.print(h.changeDatetoString(timeOfnine[k]) + "   ");
			if ((k + 1) % 3 == 0) {
				System.out.println();
			}
		}		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值