// El codigo original fue copiado de WIkipedia, estoy trabajando en otra manera de esta misma
// implementacion
class qsrt
{
internal void Quicksort(ref int[] v, int prim, int ult)
{
if (prim < ult)
{
/* Selecciona un elemento del vector y coloca los menores
que él a su izquierda y los mayores a su derecha */
int p = Pivote(v, prim, ult, ult);
/* Repite el proceso para cada una de las
particiones generadas en el paso anterior */
Quicksort(ref v, prim, p – 1);
Quicksort(ref v, p + 1, ult);
}
}
/* Implementación no clásica de la función Pivote. En lugar de
recorrer el vector simultáneamente desde ambos extremos hasta el
cruce de índices, se recorre desde el comienzo hasta el final */
int Pivote(int[] v, int prim, int ult, int piv)
{
int p = v[piv];
int j = prim;
// Mueve el pivote a la última posición del vector
Intercambia(v, piv, ult);
/* Recorre el vector moviendo los elementos menores
o iguales que el pivote al comienzo del mismo */
for (int i = prim; i < ult; i++)
{
if (v[i] <= p)
{
Intercambia(v, i, j);
j++;
}
}
// Mueve el pivote a la posición que le corresponde
Intercambia(v, j, ult);
return j;
}
void Intercambia(int[] v, int a, int b)
{
if (a != b)
{
int tmp = v[a];
v[a] = v[b];
v[b] = tmp;
}
}
}