【问题标题】:Implementation of Quick Sort for ArrayList of Object using Comparator使用 Comparator 实现 Object 的 ArrayList 快速排序
【发布时间】: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 sorting arraylist


【解决方案1】:

您需要在参数中添加一个比较器并更改为学生列表:public List&lt;Student&gt; quicksort(List&lt;Student&gt; input, Comparator&lt;Student&gt; comparator) 然后将您的 if(input.get(i) &lt;= pivot){ 更改为 if(comparator.compare(input.get(i),pivot) &lt;= 0){

当然,pivot 现在是Student pivot = input.get(middle);,而更少和更大的是List&lt;student&gt;。您现在只需将所需的比较器传递给方法即可。

【讨论】:

    【解决方案2】:

    你快到了。您唯一需要替换的是 &lt;= 运算符的使用(这仅在 Integer 可以通过 Comparable 接口的使用发送到 int 时才有效:

    if (input.get(i).compareTo(pivot) <= 0) {
    

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2019-07-05
      相关资源
      最近更新 更多