class Quicksort {

  static int a[] = {10,32,567,-1,789,3,18,0,-51};

  static int partition(int m, int n) {
    // partition subarray a[m..n] using a[m] as the pivot
    int x = a[m];
    int i = m - 1;
    int j = n + 1;
    while (true) {
      do 
	j--;
      while (a[j] > x);
      do
	i++;
      while (a[i] < x);
      if (i < j) {
	int t = a[i];
	a[i] = a[j];
	a[j] = t;
      } else
	return j;
    }
  }

  static void quicksort (int m, int n) {
    // sort subarray a[m..n] 
    if (n > m) {
      int j = partition(m,n);
      quicksort(m,j);
      quicksort(j+1,n);
    }
  }

  static public void main (String argv[]) {
    int i;
    quicksort(0,a.length-1);
    for (i = 0; i < a.length; i++)
      System.out.print(a[i] + " ");
    System.out.println();
  }
}
