#include <iostream>
#include <conio.h>
using namespace std;
int main() {
int numeros[] = {3, 2, 1, 5, 4};
int n = 5; // Tamaño del array
// Variables para el algoritmo
int low = 0;
int high = n - 1;
int stack[100]; // Pilas para manejar índices
int top = -1; // Apunta al último elemento en la pila
int temp, pivot, i, j;
// Inicializar la pila con los límites del array
stack[++top] = low;
stack[++top] = high;
// Algoritmo de QuickSort usando una pila
while (top >= 0) {
// Obtener el límite del subarray
high = stack[top--];
low = stack[top--];
// Eligiendo el pivote (último elemento del subarray)
pivot = numeros[high];
i = low - 1;
for (j = low; j < high; j++) {
if (numeros[j] < pivot) {
i++;
// Intercambiar elementos
temp = numeros[i];
numeros[i] = numeros[j];
numeros[j] = temp;
}
}
// Intercambiar el pivote con el elemento en la posición correcta
temp = numeros[i + 1];
numeros[i + 1] = numeros[high];
numeros[high] = temp;
int pi = i + 1;
// Apilar las sublistas para procesarlas más tarde
if (pi - 1 > low) {
stack[++top] = low;
stack[++top] = pi - 1;
}
if (pi + 1 < high) {
stack[++top] = pi + 1;
stack[++top] = high;
}
}
// Imprimir array ordenado en orden ascendente
cout << "Orden Ascendente: \n";
for (int i = 0; i < n; i++) {
cout << numeros[i] << " ";
}
cout << endl;
// Imprimir array ordenado en orden descendente
cout << "Orden Descendente: \n";
for (int i = n - 1; i >= 0; i--) {
cout << numeros[i] << " ";
}
cout << endl;
getch();
return 0;
}
Explicación del Código
Inicialización:
- Se define un array
stackpara manejar los índices de los subarrays. - Se inicializan
lowyhighpara definir los límites del array que se está procesando.
- Se define un array
Algoritmo de QuickSort:
- Se usa una pila para realizar un recorrido iterativo del algoritmo QuickSort, evitando la recursión.
- El pivote se elige como el último elemento del subarray.
- Se particiona el array de manera que todos los elementos menores que el pivote estén a su izquierda y los mayores a su derecha.
- Luego se intercambia el pivote con el elemento en la posición correcta.
- Las sublistas a la izquierda y derecha del pivote se apilan para ser procesadas más tarde.
Impresión de Resultados:
- Después de ordenar el array, se imprime en orden ascendente y descendente.