Metodo Shell

Páginas: 5 (1087 palabras) Publicado: 30 de junio de 2012
INTRODUCCIÓN
La ordenación es la operación de organizar un conjunto de datos en algún orden dado, puede ser creciente o decreciente para valores numéricos o bien en orden alfabético directo o inverso.
En un vector es necesario, con frecuencia, ordenar sus elementos en un orden particular, esta ordenación se denomina ordenación interna, para lograr esto se han creado diversos algoritmos deordenación que se pueden aplicar tanto en vectores (arrays unidimensionales) o matrices (arrays bidimensionales). Uno de estos métodos es el que se desarrollara en adelante: el método Shell, que lleva ese nombre en honor a Donald Shell.
Este método surge como mejora del método de inserción directa cuando el número de elementos es grande. Shell modifico los saltos contiguos resultantes de lascomparaciones, en el método de inserción directa, por saltos de mayor tamaño y así tener el ordenamiento más rápido.
Más adelante se verá cómo funciona el método, cual es su característica principal, cual es el pseudocódigo que usa y su diagrama de flujo así como un ejemplo de prueba que ayudara a su total comprensión.

DESCRIPCIÓN DEL MÉTODO
Característica Principal:
Saltos de gran tamaño entre loselementos lo que lo vuelve un ordenamiento muy veloz, más eficiente que el ordenamiento burbuja y de inserción directa.
Método:
El método de Shell propone hacer sobre el arreglo una serie de ordenaciones basadas en la inserción directa, pero dividiendo el arreglo original en varios subarreglos tales que cada elemento está separado por “m” elementos del anterior. Se debe empezar con m=n/2, siendo“n” el número de elementos de arreglo, y utilizando siempre la división entera. Luego el valor de “m” ira variando haciéndose más pequeño mediante divisiones sucesivas por 2 hasta llegar a m=1. Esto se comprenderá mejor al leer el pseudocódigo y con el ejemplo de prueba que se verá más adelante.

DIAGRAMA DE FLUJO

PSEUDOCÓDIGO
* Pseudocódigo
entero numero[100]
procedimiento Leernumero(entero numero);
procedimiento escribenumero(entero numero)
procedimiento shell (entero numero)

Algoritmo principal
entero numero
leer (num)
shell(num)
Escribe numero(Num)

Procedimiento Leernumero(entero numero)
entero i
para i desde 1 hasta numero hacer
leer (numero[i])
finpara

Procedimento escribenumero(entero numero)

para i=1 desde 1 hasta numero hacerescribir (numero[i])
finpara

Procedimiento shell(entero numero)
entero i,j,k,inc,aux
inc= numero\2
mientras inc>0 hacer
para i desde inc=1 hasta numero hacer
j= i - inc
mientras (j>o)
si(numero[j] >= numero[j+inc])
aux=numero[j]
numero[j]=numero[j+inc]
numero[j+inc]=aux
finsi
fmientras
fin para
j=j -inc

inc=inc\2
finmientras* En C++
#include<iostream>
using namespace std;
int numero[100];
void Leernumero(int vector);
void Escribenumero(int vector);
void Shell(int vector);
int main()
{
int Num;
cout<<"Ingrese Numero Elementos: ";
cin>>Num;
Leernumero(Num);
Shell(Num);
cout<<endl;
Escribenumero(Num);
return 0;
}
void Leernumero(int vector)
{
int i;for(i=1;i<=vector;i++)
{
cout<<"numero["<<i<<"]=";
cin>>numero[i];
}
}
void Escribenumero(int vector)
{
int i;
for(i=1;i<=vector;i++)
{
cout<<"numero["<<i<<"]="<<numero[i]<<endl;
}
}
void Shell(int vector)
{
int i,j,k,incremento,aux;
incremento=vector/2;
while(incremento>0)
{for(i=incremento+1;i<=vector;i++)
{
j=i-incremento;
while(j>0)
{
if(numero[j]>=numero[j+incremento])
{
aux = numero[j];
numero[j] = numero[j+incremento];
numero[j+incremento] = aux;
}

j=j-incremento;
}
}

incremento=incremento/2;
}
}
* Pantallas

PRUEBA DEL MÉTODO
CASO: METODO SHELL
Numero de casos =8
La comparación se hará de...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Metodo Shell
  • Metodo shell
  • Metodo shell
  • metodo de ordenacion shell sort
  • Método de Ordenamiento Shell
  • Método de Ordenamiento Shell
  • Metodo shell
  • Metodo De Diseño De Pavimentos Shell

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS