Quicksort en java



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Quicksort {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("ingrese numero de datos a ingresar: ");
int tam = Integer.parseInt(in.readLine());
int arr[] = new int[tam];
int j = 0;
for (int i = 0; i < arr.length; i++) {
j+=1;
System.out.println("Elemento "+j+":");
arr[i]=Integer.parseInt(in.readLine());
}
OrdenarQuicksort(arr,0,arr.length-1);
imprimir(arr);
}
private static void OrdenarQuicksort(int[] a, int izq, int der) {
int pivote=a[izq];
int i = izq;
int j = der;
int aux;
while(i<j){ //mientras no se crucen las busquedas
while(a[i]<=pivote&&i<j) i++; //busca el elemento mayor que piivote
while(a[j]>pivote) j--; //busca elemento menor que pivote
if(i<j){ //si no se han cruzado
aux = a[i]; //los intercambia
a[i]=a[j];
a[j]=aux;
}
}
a[izq]=a[j]; //se coloca el pivote en sulugar d forma que tendremos
a[j]=pivote; //los menores a su izquierda y los mayores a su derecha
if(izq<j-1)
OrdenarQuicksort(a, izq, j-1); //ordenamos subarray izquierdo
if(j+1<der)
OrdenarQuicksort(a, j+1, der); //ordenamos subarray derrecho
}
public static void imprimir(int[] vector){
for (int i = 0; i < vector.length-1; i++) {
System.out.print(vector[i]+" ");
}
System.out.println(vector[vector.length-1]);
}

}