public void quick() {
	// Llamar al metodo recursivo.
	recurenciaQuick(0, elementos - 1);
}

private void recurenciaQuick(int izquerda, int derecha) {
	if (derecha - izquerda <= 0) {
		// Si derecha es menor que izquerda ya terminó.
		return;
	}
	else {
		int pivot = array[derecha];

		int particion = particionar(izquerda, derecha, pivot);
		recurenciaQuick(izquerda, particion - 1);
		recurenciaQuick(particion + 1, derecha);
	}
}

private int particionar(int izquerda, int derecha, int pivot) {
	int punteroIzquerda = izquerda-1;
	int punteroDerecha = derecha;
	while (true) {
		// Sumar el punteroIzquerda hasta que es igual al pivot
		while (array[++punteroIzquerda] < pivot);
		// Restar el puntoDerecha hasta que es igual a pivot o hasta 0.
		while (punteroDerecha > 0 && array[--punteroDerecha] > pivot);

		if (punteroIzquerda >= punteroDerecha) {
			// Si el puntero izquerda es mayor o igual a la derech termina el while.
			break;
		}
		else {
			// Intercambiar los valores.
			int temp = array[punteroIzquerda];
			array[punteroIzquerda] = array[punteroDerecha];
			array[punteroDerecha] = temp;
		}
	}
	// Intercambiar los valores.
	int temp = array[punteroIzquerda];
	array[punteroIzquerda] = array[derecha];
	array[derecha] = temp;

	// Devolver la posición donde terminó.
	return punteroIzquerda;
}