[英]Implementation of Quick Sort for ArrayList of Object using Comparator
我有一類學生
public Student(int ID, String firstName, String lastName, int mark) {
this.ID = ID;
this.firstName = firstName;
this.lastName = lastName;
this.mark = mark;
}
我創建了一個 Student 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 和在需要時按 firstName 對它們進行排序?
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
}
您快到了。 您唯一需要替換的是<=
運算符的使用(這僅適用於可以使用Comparable
接口將Integer
打包為int
的情況:
if (input.get(i).compareTo(pivot) <= 0) {
您需要在參數中添加一個比較器並更改為學生列表: public List<Student> quicksort(List<Student> input, Comparator<Student> comparator)
if(input.get(i) <= pivot){
public List<Student> quicksort(List<Student> input, Comparator<Student> comparator)
然后更改您的if(input.get(i) <= pivot){
到if(comparator.compare(input.get(i),pivot) <= 0){
當然,pivot 現在是Student pivot = input.get(middle);
List<student>
越來越少。 你現在只需要將你想要的比較器傳遞給方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.