【发布时间】:2016-03-17 07:48:14
【问题描述】:
我有一个学生班
public Student(int ID, String firstName, String lastName, int mark) {
this.ID = ID;
this.firstName = firstName;
this.lastName = lastName;
this.mark = mark;
}
我创建了一个学生的 ArrayList,我需要使用 Comparator 对多个属性按升序对它们进行排序。
public static Comparator<Student> StuNameComparator = new Comparator<Student>() {
public int compare(Student s1, Student s2) {
String StudentName1 = s1.getFirstName().toUpperCase();
String StudentName2 = s2.getFirstName().toUpperCase();
return StudentName1.compareTo(StudentName2);
}
};
public static Comparator<Student> StudentID = new Comparator<Student>() {
public int compare(Student s1, Student s2) {
int id1 = s1.getID();
int id2 = s2.getID();
return id1-id2;
}};
我知道,我可以轻松使用
Collections.sort(arraylist, Student.StuNameComparator);
但这里有一个问题,我需要使用 Quicksort 进行排序,对于收集,使用的排序是 MergeSort。 我知道 MergeSort 更好,因为它很稳定并且没有 n^2 作为最坏的情况,但我需要实现快速排序
这是快速排序的初稿,我需要更改参数的类型 但是如何使用快速排序,在需要时按 ID 和在需要时按名字对它们进行排序?
int middle = (int) Math.ceil((double)input.size() / 2);
int pivot = input.get(middle);
for (int i = 0; i < input.size(); i++) {
if(input.get(i) <= pivot){
///somecode
}
【问题讨论】:
-
从 Java 7 开始,
Collection.sort正在使用 Timsort 对对象进行排序。 en.wikipedia.org/wiki/Timsort