Shell sort

Solo disponible en BuenasTareas
  • Páginas : 2 (333 palabras )
  • Descarga(s) : 0
  • Publicado : 11 de octubre de 2010
Leer documento completo
Vista previa del texto
SHELL SORT

El ordenamiento Shell (Shell sort en inglés) es un algoritmo de ordenamiento. El método se denomina Shell en honor de su inventor Donald Shell. Su implementación original, requiereO(n2) comparaciones e intercambios en el peor caso. Un cambio menor presentado en el libro de V. Pratt produce una implementación con un rendimiento de O(nlog2 n) en el peor caso. Esto es mejor que lasO(n2) comparaciones requeridas por algoritmos simples pero peor que el óptimo O(n log n). Aunque es fácil desarrollar un sentido intuitivo de cómo funciona este algoritmo, es muy difícil analizar sutiempo de ejecució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á "casiordenada".
•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 comparandoelementos 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 deespacio 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.

voidshell_sort(int A[], int size)
{
int i, j, incrmnt, temp;
for(incrmnt = 1 ; incrmnt 0)
{
for (i=incrmnt; i < size; i++)
{
j = i;
temp = A[i];
while ((j >= incrmnt) && (A[j-incrmnt] >temp))
{
A[j] = A[j - incrmnt];
j = j - incrmnt;
}
A[j] = temp;
}
incrmnt /= 2;
}
}
El algoritmo Shell sort en Java

public static void shellSort(int[] a) {
for ( int increment =a.length / 2;
increment > 0;
increment = (increment == 2 ? 1 : (int) Math.round(increment / 2.2))) {
for (int i = increment; i < a.length; i++){
for (int j = i; j >= increment && a[j -...
tracking img