Я пытался настроить ваш код, чтобы сделать его сортировку по убыванию, но не удалось. Однако я написал QuickSort DualPivot, который вы можете изменить порядок так легко. Вот кодЭто нисходящий порядок, чтобы изменить порядок, просто следуйте комментарию внутри кода. Этот код очень прост и организован.
public class DualPivotQS
{
private static void sort(int[] a, int lo, int hi)
{
if (hi <= lo)
return;
int lt = lo, gt = hi;
int v = a[lo];
int i = lo + 1;
while (i <= gt)
{
if (v > a[i]) // change here to change order
swap(a, lt++, i++);
else if (v < a[i]) // change here to change order
swap(a, i, gt--);
else
i++;
}
// a[lo..lt-1] < v = a[lt..gt] < a[gt+1..hi].
sort(a, lo, lt - 1);
sort(a, gt + 1, hi);
}
private static void swap(int[] a, int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
public static void main(String[] args)
{
int[] num = { 5, 5, 0, 1, 7, 2, 99, 23, 56, 44, 32, 104, 4, 7, 8, 2, 7 };
sort(num, 0, num.length - 1);
for (int i = 0; i < num.length; i++)
System.out.print(num[i] + ", ");
}
}
Ссылка: https://algs4.cs.princeton.edu/23quicksort/