import java.util.Comparator; public class QuickSortObj { public void sortInPlace(S[] list, Comparator comparator) { quickSort(list, 0, list.length-1, comparator); } private void quickSort(S[] arr, int begin, int end, Comparator compar) { if (begin < end) { int partitionIndex = partition(arr, begin, end, compar); quickSort(arr, begin, partitionIndex-1, compar); quickSort(arr, partitionIndex+1, end, compar); } } private int partition(S[] arr, int begin, int end, Comparator compar) { S pivot = arr[end]; int i = (begin-1); for (int j = begin; j < end; j++) { if (compar.compare(arr[j], pivot)<0) { i++; S swapTemp = arr[i]; arr[i] = arr[j]; arr[j] = swapTemp; } } S swapTemp = arr[i+1]; arr[i+1] = arr[end]; arr[end] = swapTemp; return i+1; } public static void main(String[] args) { Student[] sss = Student.getStudents(); for (Student s : sss) { System.out.println(s); } QuickSortObj mos = new QuickSortObj<>(); mos.sortInPlace(sss, Student.nameComparator()); mos.sortInPlace(sss, Student.yearComparator()); System.out.println(); for (Student s : sss) { System.out.println(s); } } }