Ordenamiento Shell sort
•Es un algoritmo de ordenación interna sencillo pero ingenioso, basado en comparaciones e intercambios.
•Sus resultados son radicalmente mejores que los que se pueden obtener con el método (la burbuja, selección directa o inserción directa).
•Es un algoritmo que casi no se usa por las siguientes causas:
•Para su comprensión requiere un cierto esfuerzo y algo de tiempo, y se suele centrar la atención en los tres algoritmos más básicos (burbuja, selección e inserción).
•ShellSort, es el mejor algoritmo de ordenación, en los que la cantidad de memoria adicional que necesita (aparte de los propios datos a ordenar) es constante, sea cual sea la cantidad de datos a ordenar.
•Otros métodos de ordenación, como QuickSort, BinSort, HeapSort o RadixSort pueden pueden superar a ShellSort en cuanto al tiempo de ejecución, pero ninguno es algoritmo in-situ.
•Es necesario gestionar una cantidad adicional de memoria proporcional al tamaño de los datos a ordenar.
Caracteristicas
- •Se trata de un algoritmo de ordenación interna. Al igual que cualquier otro de ordenación interna (los datos están en memoria principal)
- •Se basa en comparaciones e intercambios.
- •Necesita que el tiempo de acceso a cualquier dato sea constante, Aplicado a otras estructuras, como listas enlazadas , etc. , el tiempo de acceso a un elemento no es constante, depende de la posición del elemento.
Programa basado en C++
# include
void main (void)
{
int a[15];
int n, inc, i, j, tmp;
cout <<"De cuantos elementos es el arreglo? ";
cin >> n;
for (i=1; i<=n; i++)
{
cout <<"Introduce el elemento " <
cin >> a[i];
}
nc = n/2;
while (inc > 0)
{
for (i = inc +1; i<=n; i++)
{
tmp = a[i];
j=i;
while ( (j-inc) > 0 )
{
if (tmp < a[j-inc])
{
a[j]=a[j-inc];
j=j-inc;
}
else
break;
} // fin del while //
a[j]=tmp;
} // fin del for //
inc = inc/2;
} // fin del while //
cout <
for (i=1; i<=n; i++)
cout << a[i] <
} // fin de shell sort //
Video