import java.util.*;
public class QuickSort
{
public static int random(int p, int r)
{
Random rand = new Random();
return rand.nextInt(r-p) + p;
}
public static int Randomized_Partition(int[] a, int p, int r)
{
int i = random(p, r);
int tmp = a[r];
a[r] = a[i];
a[i] = tmp;
int k = Partition(a, p, r);
return k;
}
public static int Partition(int[] a, int p, int r)
{
int x = a[r];
int i = p - 1;
for (int j = p; j < r; ++j)
{
if (a[j] <= x)
{
++i;
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
int tmp = a[i+1];
a[i+1] = a[r];
a[r] = tmp;
return i + 1;
}
public static void QuickSort(int[] a, int p, int r)
{
if (p < r)
{
int q = Randomized_Partition(a, p, r);
QuickSort(a, p, q - 1);
QuickSort(a, q + 1, r);
}
}
public static void main(String[] args)
{
int[] a = {2, 8, 7, 1, 3, 5, 6, 4};
QuickSort(a, 0, a.length - 1);
for (int tmp : a)
{
System.out.println(tmp);
}
}
}
public class QuickSort
{
public static int random(int p, int r)
{
Random rand = new Random();
return rand.nextInt(r-p) + p;
}
public static int Randomized_Partition(int[] a, int p, int r)
{
int i = random(p, r);
int tmp = a[r];
a[r] = a[i];
a[i] = tmp;
int k = Partition(a, p, r);
return k;
}
public static int Partition(int[] a, int p, int r)
{
int x = a[r];
int i = p - 1;
for (int j = p; j < r; ++j)
{
if (a[j] <= x)
{
++i;
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
int tmp = a[i+1];
a[i+1] = a[r];
a[r] = tmp;
return i + 1;
}
public static void QuickSort(int[] a, int p, int r)
{
if (p < r)
{
int q = Randomized_Partition(a, p, r);
QuickSort(a, p, q - 1);
QuickSort(a, q + 1, r);
}
}
public static void main(String[] args)
{
int[] a = {2, 8, 7, 1, 3, 5, 6, 4};
QuickSort(a, 0, a.length - 1);
for (int tmp : a)
{
System.out.println(tmp);
}
}
}