0% encontró este documento útil (0 votos)
117 vistas4 páginas

Algoritmo de Ordenamiento Shell

El algoritmo Shell es una mejora del ordenamiento por inserción que ordena elementos distantes en el vector, reduciendo progresivamente la distancia entre ellos. Comienza ordenando elementos separados por grandes distancias y luego reduce la distancia, lo que permite que los elementos se muevan más rápido a su posición final, ordenando los datos más eficientemente que otros métodos como el ordenamiento por burbuja o inserción.

Cargado por

Maritza Panacual
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
117 vistas4 páginas

Algoritmo de Ordenamiento Shell

El algoritmo Shell es una mejora del ordenamiento por inserción que ordena elementos distantes en el vector, reduciendo progresivamente la distancia entre ellos. Comienza ordenando elementos separados por grandes distancias y luego reduce la distancia, lo que permite que los elementos se muevan más rápido a su posición final, ordenando los datos más eficientemente que otros métodos como el ordenamiento por burbuja o inserción.

Cargado por

Maritza Panacual
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

Algoritmo de ordenamiento Shell

El método se denomina así en honor de su inventor Donald Shell. Su implementación

original, requiere O(n2) comparaciones e intercambios en el peor caso, aunque un cambio

menor presentado en el libro de V. Pratt produce una implementación con un rendimiento

de O(n log2 n) en el peor caso. Esto es mejor que las O(n2) comparaciones requeridas por

algoritmos simples pero peor que el óptimo O(n log n).

El Shell sort es una generalización del ordenamiento por inserción, teniendo en cuenta dos

observaciones: El ordenamiento por inserción es eficiente si la entrada está "casi ordenada".

El ordenamiento por inserción es ineficiente, en general, porque mueve los valores sólo una

posición cada vez.

El algoritmo Shell sort mejora el ordenamiento por inserción comparando elementos

separados por un espacio de varias posiciones. Esto permite que un elemento haga "pasos

más grandes" hacia su posición esperada. Los pasos múltiples sobre los datos se hacen con

tamaños de espacio cada vez más pequeños. El último paso del Shell sort es un simple

ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del

vector están casi ordenados.

Descripción 

El algoritmo Shell es una mejora de la ordenación por inserción, donde se van comparando

elementos distantes, al tiempo que se los intercambian si corresponde. A medida que se


aumentan los pasos, el tamaño de los saltos disminuye; por esto mismo, es útil tanto como

si los datos desordenados se encuentran cercanos, o lejanos.

Es bastante adecuado para ordenar listas de tamaño moderado, debido a que su velocidad es

aceptable y su codificación es bastante sencilla. Su velocidad depende de la secuencia de

valores con los cuales trabaja, ordenándolos.El siguiente ejemplo muestra el proceso de

forma gráfica:

Considerando un valor pequeño que está inicialmente almacenado en el final del vector.

Usando un ordenamiento O(n2) como el ordenamiento de burbuja o el ordenamiento por

inserción, tomará aproximadamente n comparaciones e intercambios para mover este valor

hacia el otro extremo del vector.

El Shell sort primero mueve los valores usando tamaños de espacio gigantes, de manera

que un valor pequeño se moverá bastantes posiciones hacia su posición final, con sólo unas

pocas comparaciones e intercambios.

#include<iostream>
#include<conio.h>

using namespace std;


int Arreglo[100];
void LeerArreglo(int Numero);
void EscribeArreglo(int Numero);
void Shell(int Numero);

int main(){
int Num;
cout<<"Ingrese dimension del arreglo : ";
cin>>Num;
LeerArreglo(Num);
Shell(Num);
cout<<endl;
EscribeArreglo(Num);
return 0;
}

void LeerArreglo(int Numero){


int i;
for(i=1;i<=Numero;i++)
{
cout<<"Arreglo["<<i<<"]=";
cin>>Arreglo[i];
}
}

void EscribeArreglo(int Numero){


int i;
cout<<"elementos ordenados por metodo Shell sort"<<endl;
for(i=1;i<=Numero;i++)
{

cout<<"\t"<<Arreglo[i];
}
cout<<endl;
system("pause");
}

void Shell(int Numero){


int i,j,k,incremento,aux;

incremento=Numero/2;

while(incremento>0){
for(i=incremento+1;i<=Numero;i++){
j=i-incremento;
while(j>0){
if(Arreglo[j]>=Arreglo[j+incremento]){
aux = Arreglo[j];
Arreglo[j] = Arreglo[j+incremento];
Arreglo[j+incremento] = aux;
}
else{
j=0;
}
j=j-incremento;
}
}
incremento=incremento/2;
}
cout<<endl;

También podría gustarte