gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:16 26 4
gpt4 key购买 nike

这是个愚蠢的问题。我有自己的比较器接口(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com