java - 排序算法 - 如何在 main :) 中实现我的类

标签 java algorithm sorting comparator bubble-sort

这是个愚蠢的问题。我有自己的比较器接口(interface),Student 类——它的对象将被排序,BubbleSort 类带有冒泡排序算法和 main。我认为除了 main 之外的每个类都写得很好,但是我在 main 中实现它们以开始我的排序时遇到问题:/我刚刚创建了我想要排序的随机学生的 ArrayList,但我有问题BubbleSort 类,不知道如何开始。

将来(我希望是今天 :))我将对其他包含排序算法(如 BubbleSort)的类执行完全相同的操作。我认为它们在 main 中的实现是相同的。

import java.util.Random;
import java.util.ArrayList;

public class Program {

    public static void main(String[] args) {
        int elements = 100000;
        ArrayList<Student> list = new ArrayList<Student>();
        Random rand = new Random();
        for (int i=0; i<elements; i++) {
            list.add(new Student(rand.nextInt(4)+2, rand.nextInt(900000)));
        }
        System.out.println(list);
    }
}

.

import java.util.ArrayList;

public class BubbleSort {

    private final Comparator comparator;

    public BubbleSort(Comparator comparator) { 
        this.comparator = comparator; 
    }

    public ArrayList<Student> sort(ArrayList<Student> list) {
        int size = list.size();
        for (int pass = 1; pass < size; ++pass) {
            for (int left = 0; left < (size - pass); ++left) {
                int right = left + 1;
                if (comparator.compare(list.get(left), list.get(right)) > 0)
                    swap(list, left, right);
            }
        }
        return list;
    }

    public int compare(Object left, Object right) throws ClassCastException
            { return comparator.compare(left, right); }


    private void swap(ArrayList list, int left, int right) {
        Object temp = list.get(left);
        list.set(left, list.get(right));
        list.set(right, temp);
    }
}

.

public class Student implements Comparator<Student> {

    int rate;
    int indeks;

    public Student(int ocena, int index) {
        this.rate = ocena;
        indeks = index;
    }

    public String toString() {
        return "Numer indeksu: " + indeks + " ocena: " + rate + "\n";
    }

    public int getIndeks() {
        return indeks;
    }

    public int getRate() {
        return rate;
    }

    public int compare(Student left, Student right) {
        if (left.getIndeks()<right.getIndeks()) {
            return -1;
        }
        if (left.getIndeks() == right.getIndeks()) {
            return 0;
        }
        else {
            return 1;
        }
    }

}

.

public interface Comparator<T> {
    public int compare(T left, T right) throws ClassCastException;
}

最佳答案

您的代码看起来有点奇怪。你没有提到你是否必须使用冒泡排序所以我写下我的两个想法

1.没有明确使用冒泡排序

您可以将 Collections.sort() 与覆盖的compareTo() 方法结合使用

所以你的代码看起来像这样

class Student implements Comparable<Student>{
//variables constructor methods go here
private index;
@Override
public int compareTo(Students s) {
    int index = s.index;
    if (this.index > index) {
        return 1;
    } else if (this.index == index) {
        return 0;
    } else {
        return -1;
    }
}

} 在你的主类中 Collections.sort(myStudents)

2.明确使用冒泡排序

学生类

    class Student{
    //class variables methods constructor goes here
    }

比较器类

    class StudentComparator implements Comparator<Student>{
        @Override
        public int compare(Student a, Student b) {
           //bubble sort code goes here
        }}

主类

     class MyMainClass{
          public static void main(String[] args) {
          public int elements = 100000;
          ArrayList<Student> list = new ArrayList<Student>();
          Random rand = new Random();
          for (int i=0; i<elements; i++) {
                list.add(new Student(rand.nextInt(4)+2, rand.nextInt(900000)));
            }
          Collections.sort(list, new StudentComparator());

           }

关于java - 排序算法 - 如何在 main :) 中实现我的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23057997/

相关文章:

java - 用于调用 Java 方法的 XSLT 处理器

java - 将 Collections.Frequency 与 List<SomeBeanType> 一起使用

algorithm - 逻辑回归和softmax回归的区别

algorithm - 扭转井字游戏

javascript - 按字母数字顺序对一组 li 标签进行排序

java - Hibernate 和 MySQL 配置

java - 模拟类将 null 分配给 @NonNull 字段(Android)

c - 计算整数中不同数字的最有效方法是什么

java - 这个 "mergeSort"有什么问题吗?

python按列表的内部列表对字典进行排序