公司待办,一种是几张表联查出来的,另一种其他系统过来的。现在要两个数据合在一起按修改时间排序。哈哈,快速排序实战片来了。
public class fastSort {
public static void main(String[] args) {
//造数据
ArrayList<UpcomingVO> list = new ArrayList<>();
list.add(new UpcomingVO("2020-03-04"));
list.add(new UpcomingVO("2020-03-06"));
list.add(new UpcomingVO("2020-03-02"));
list.add(new UpcomingVO("2020-03-03"));
list.add(new UpcomingVO("2020-03-07"));
list.add(new UpcomingVO("2020-03-04"));
list.add(new UpcomingVO("2020-03-07"));
list.add(new UpcomingVO("2020-02-01"));
list.add(new UpcomingVO("2020-02-14"));
list.add(new UpcomingVO("2020-03-09"));
sort(list,0,list.size()-1);
list.forEach(e-> System.out.println(e.info()));
}
//根据修改时间倒着排
public static void sort(ArrayList<UpcomingVO> list, int left, int right) {
if(left>=right){
return;
}
int i=left;
int j=right;
UpcomingVO baseData = list.get(left);
Date base = list.get(left).getUpdatedDate();
while(i<j){
//先右边开始找 (很重要)
while (bigOrEquals(base,list.get(j).getUpdatedDate()) && i<j){
j--;
}
while (bigOrEquals(list.get(i).getUpdatedDate(),base) && i<j){
i++;
}
UpcomingVO voi = list.get(i);
list.set(i,list.get(j));
list.set(j,voi);
}
list.set(left,list.get(i));
list.set(i,baseData);
sort(list,left,i-1);
sort(list,i+1,right);
}
//a比b大 返回true
public static boolean bigOrEquals(Date a,Date b){
if(a.compareTo(b)>=0){
return true;
}
return false;
}
}
class UpcomingVO{
private Date updatedDate;
public SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
public UpcomingVO(String str){
try {
this.updatedDate = sf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
public Date getUpdatedDate() {
return updatedDate;
}
public void setUpdatedDate(Date updatedDate) {
this.updatedDate = updatedDate;
}
public String info(){
return sf.format(updatedDate);
}
}