Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created August 30, 2021 16:30
Show Gist options
  • Save parzibyte/34c23ea5604b69669f1e0b0f5889b620 to your computer and use it in GitHub Desktop.
Save parzibyte/34c23ea5604b69669f1e0b0f5889b620 to your computer and use it in GitHub Desktop.
static int particion(int[] arreglo, int izquierda, int derecha)
{
int pivote = arreglo[izquierda];
while (true)
{
/*
Acercar los extremos hacia el centro mientras se encuentren elementos ordenados
*/
while (arreglo[izquierda] < pivote)
{
izquierda++;
}
while (arreglo[derecha] > pivote)
{
derecha--;
}
// Si los extremos se cruzaron o superaron, entonces toda la porción del arreglo estaba ordenada
if (izquierda >= derecha)
{
// Regresamos el índice para indicar hasta qué posición el arreglo está en orden
return derecha;
}
else
{
// Si no estuvieron ordenados, vamos a hacer el intercambio
int temporal = arreglo[izquierda];
arreglo[izquierda] = arreglo[derecha];
arreglo[derecha] = temporal;
// Y acercamos en 1 los extremos
derecha--; izquierda++;
}
// El while se repite hasta que izquierda >= derecha
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment