Codigo
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
int numeros[] = {3, 2, 1, 5, 4};
int n = 5; // Tamaño del array
int gap, i, j, temp;
// Algoritmo del Ordenamiento por Shell
// Inicialmente, el gap es la mitad del tamaño del array
gap = n / 2;
while (gap > 0) {
// Realizar una inserción con el gap actual
for (i = gap; i < n; i++) {
temp = numeros[i];
j = i;
// Mover los elementos que están más allá del gap
// y que son mayores que temp, a la posición adelante
while (j >= gap && numeros[j - gap] > temp) {
numeros[j] = numeros[j - gap];
j -= gap;
}
numeros[j] = temp;
}
// Reducir el gap
gap /= 2;
}
// 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 del Gap:
- Comienza con un
gapigual a la mitad del tamaño del array.
- Comienza con un
Ordenamiento por Shell:
- Para cada
gap, se realiza una inserción de elementos que están separados por esegap. - El proceso de inserción es similar al de la ordenación por inserción, pero con un
gapinicial y reduciendo gradualmente. - Se mueve el
gapa la mitad en cada iteración hasta que sea 0.
- Para cada
Impresión de Resultados:
- Después de ordenar el array, se imprime en orden ascendente y descendente.