import java.util.*;
import java.io.*;
public class QuickSort
{
private int findPartition(Comparable [] data,int min,int max)
{
int left;
int right;
Comparable temp;
Comparable partitionElement = data[min];
left = min;
right = max;
while (left<right)
{
while(data[left].compareTo(partitionElement) <=0 && left<right)
left++;
while(data[right].compareTo(partitionElement)>0)
right--;
if(left<right)
{
temp = data[left];
data[left] = data[right];
data[right] = temp;
}
}
temp = data[min];
data[min] = data[right];
data[right] = temp;
return right;
}
public void quickSort (Comparable [] data,int s,int e)
{
int p;
if (s<e)
{
p=e;
p=this.findPartition(data,s,p);
this.quickSort(data,s,p-1);
this.quickSort(data,p+1,e);
}
}
public static void main (String [] args) throws IOException
{
String inString ;
StringTokenizer tokenizer;
Integer [] elements;
QuickSort qs = new QuickSort();
BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
System.out.println("Please input the size: ");
inString = in.readLine();
elements = new Integer[Integer.parseInt(inString)];
System.out.println("Enter the numbers of elements : ");
inString = in.readLine();
tokenizer = new StringTokenizer(inString);
for (int i =0; i<elements.length && tokenizer.hasMoreTokens();i++)
{
elements[i] = Integer.parseInt(tokenizer.nextToken());
}
qs.quickSort(elements,0,elements.length-1);
System.out.println("after sorted :");
for (int i=0;i<elements.length;i++)
{
System.out.println(elements[i]);
}
}
}