#include <iostream>
using namespace std;
int partition(int *a,int p,int r)
{
int x=a[r];
int i=p-1;//note i important which is used for
//storage the number smaller than flag x=a[r]
for (int j=p;j<r;j++)
{
if (a[j]<x)// if a[j] smaller than x=a[r],
//exchange a[i+1] and a[j]
{
i++;
int t=a[j];
a[j]=a[i];
a[i]=t;
}
}
int t=a[i+1];// i+1 is the a[r] final position
// exchange a[r] and a[i+1]
a[i+1]=a[r];
a[r]=t;
return i+1; //return the a[r] final position i+1
}
void quicksort(int *a,int p,int r)
{
if (p<r)//the position lower than the higher
{
int q=partition(a,p,r);//q is the a[r] final position
// depart the arry[p...q-1] and arry[q+1...r]
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main()
{
int arry[]={3,2,1,4,5,6,9,8,7,0};
quicksort(arry,0,9);
for (int i=0;i<10;i++)
cout<<arry[i]<<" ";
cout<<endl;
}
import java.util.Scanner;
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=Integer.parseInt(scanner.next());
int a[]=new int[n];
for (int i = 0; i < a.length; i++) {
a[i]=Integer.parseInt(scanner.next());
}
quickSort(a, 0, n-1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
public static void quickSort(int a[], int p, int e) {
if (p<e) {
int q=partion(a, p, e);
quickSort(a, p, q-1);
quickSort(a, q+1, e);
}
}
public static int partion(int a[], int p, int e) {
int x=a[e];
int j=p-1;
for (int i = p; i < e; i++) {
if (a[i]<x) {
j++;
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int t=a[j+1];
a[j+1]=a[e];
a[e]=t;
return j+1;
}
}
// public static <T> void swap (T a, T b) {
// T temp=b;
// b=a;
// a=temp;
// }