Este documento describe el algoritmo de ordenamiento Shell. Explica que es un método de ordenamiento interno basado en comparaciones e intercambios que no requiere memoria adicional. Detalla los pasos del algoritmo incluyendo recorrer el arreglo en incrementos que van disminuyendo hasta ordenarlo completamente. También incluye código en C++ para implementar el ordenamiento Shell y funciones para leer y mostrar el arreglo ordenado.
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ordenamiento shell diap
1. Integrantes:
Jasleny Gorrin
Arimsay Diaz
Eislen Puentes
Republica Bolivariana de Venezuela
Ministerio del Poder Popular para la Defensa
Universidad Nacional Experimental Politécnica de la
Fuerza Armada
UNEFA
NÚCLEO-MÉRIDA
2. Donald shell
En 1959
Comparaciones
e intercambios
obtener
Mejores
resultados
Otros métodos
Algoritmo
in-situ.
No requiere
memoria
extra
Ordenación
interna
basado
METODO DE ORDENAMIENTO SHELL
3. Se trata de un algoritmo de ordenación
interna.
Se basa en comparaciones e intercambios.
Necesita que el tiempo de acceso a cualquier
dato sea constante.
No es estable.
En cierto modo puede considerarse una
ampliación del algoritmo de inserción directa
con lo cual conviene tenerlo claro antes de
meterse con el shell.
4. #include<iostream>
using namespace std;
#define largo 50
void ordenShell(int A[],int n)
{
int i, j, inc, temp;
for(inc = 1 ; inc<n;inc=inc*3+1);
while (inc > 0) {
for (i=inc; i < n; i++) {
j = i;
temp = A[i];
while ((j >= inc) && (A[j-inc] > temp))
{
A[j] = A[j - inc];
j = j - inc;
}
A[j] = temp;
}
inc/= 2;
}
}
5. void leeCadena(int cant,int n[])
{
int i;
for(i=0;i<cant;i++)
{
cout<<"Ingresa numero "<<i+1<<": ";
cin>>n[i];
}
}
void muestraCadena(int cant,int n[])
{
int i;
for(i=0;i<cant;i++)
{
cout<<n[i]<<"-";
}
}
int main ()
{
int A[largo],n;
do{
cout<<"Cantidad de numeros a ingresar: ";cin>>n;
if(n<=0||n>largo)
cout<<"Debe ingresar un valor > a 0 y < a "<<largo<<endl;
}while(n<=0||n>largo);
leeCadena(n,A);
ordenShell(A,n);
muestraCadena(n,A);
}