I'am работает над проектом для сортировки массива объектов Student со следующим critiria:Quicksort С Компаратором
1.Sort сорта
сорта 2.Ели равны, сортировать по StudentNumber.
Теперь я получил эту работу, используя метод Arrays.Sort (T [] a, Comparator <> c). , так как я думаю, что этот метод сортировки должен замедляться, я хочу использовать Quicksort.
я получил следующий фрагмент кода:
public static void quickSort(Student[] arr, int low, int high) {
if (arr == null || arr.length == 0) {
return;
}
if (low >= high) {
return;
}
// pick the pivot
int middle = low + (high - low)/2;
Student pivot = arr[middle];
// make left < pivot and right > pivot
int i = low, j = high;
while (i <= j) {
while (arr[i].getCijfer() < pivot.getCijfer()) {
i++;
}
while (arr[j].getCijfer() > pivot.getCijfer()) {
j--;
}
if (i <= j) {
Student temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
// recursively sort two sub parts
if (low < j) {
quickSort(arr, low, j);
}
if (high > i) {
quickSort(arr, i, high);
}
}
UPDATE Компаратор Код:
private static Comparator<Student> gradeComparator = new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int compareTo = 0;
if (o1.cijfer > o2.cijfer) {
compareTo = -1;
} else {
if (o1.cijfer < o2.cijfer) {
compareTo = 1;
} else {
// als Studenten Grade gelijk, vergelijk op studenten Ldap
if (o1.cijfer == o2.cijfer) {
if (o1.studentnummer > o2.studentnummer) {
compareTo = -1;
} else {
compareTo = 1;
}
}
}
}
return compareTo;
}
};
это сортирует массив на Сорта (cijfer), но i'am застрял на том, где поставить свою 2-й критерий сортировки. пожалуйста помогите!
Сердечные приветы
«так как я думаю, что этот метод сортировки должен замедляться». Как медленно медленный? Как быстро вы думаете, что это должно быть? Я бы сказал, что это только медленно, если: а) вы сортируете * грузы * данных; b) ваш компаратор выполняет большую работу по сравнению элементов. Можете ли вы опубликовать свой код компаратора? –