Sei sulla pagina 1di 6

UNIVERSIDAD DE LAS CIENCIAS INFORMÁTICAS

Seminario numero I

de

Programación III

Integrantes:

Daniel Chávez Cepero FTE 303

Yanisleydis Maldonado Sánchez FTE 303

1.1 INTRODUCCIÓN
El método de ordenación Shell debe su nombre a su inventor, Donald Shell, y fue uno
de los primeros algoritmos de ordenamiento en romper la barrera del tiempo
cuadrático.

Es una mejora del método de inserción directa, utilizado cuando el array tiene un gran
número de elementos.

No es estable: dados dos elementos que al compararlos sean «iguales» -es decir, que
pueden ir indistintamente en la misma posición, no mantienen necesariamente el
orden relativo inicial entre ellos.

El estudio de su complejidad no es trivial, sino todo lo contrario. La implementación


original de Shell tiene una complejidad en el peor caso de O(n2), aunque en un caso
promedio o en casos típicos comprobados empíricamente, los resultados son mucho
mejores que con la burbuja, selección directa o inserción directa, cuya complejidad en
el peor caso también es del orden de O(n2).

Cualquier algoritmo de ordenación que intercambia elementos adyacentes (como los


algoritmos burbuja, selección o inserción) tiene un tiempo promedio de ejecución de
orden cuadrático (n2). El método Shell mejora este tiempo comparando cada elemento
con el que está a un cierto número de posiciones llamado salto, en lugar de
compararlo con el que está justo a su lado. Este salto es constante, y su valor inicial es
N/2 (siendo N el número de elementos, y siendo división entera).

Se van dando pasadas con el mismo salto hasta que en una pasada no se intercambie
ningún elemento de sitio. Entonces el salto se reduce a la mitad, y se vuelven a dar
pasadas hasta que no se intercambie ningún elemento, y así sucesivamente hasta que
el salto vale 1.

1.2Implementación

public static void shell(int A[]) {


int salto, aux, i;
boolean cambios;

for (salto = A.length / 2; salto != 0; salto /= 2) {


cambios = true;
while (cambios) { // Mientras se intercambie algún elemento
cambios = false;
for (i = salto; i < A.length; i++) // se da una pasada
{
if (A[i - salto] > A[i]) { // y si están desordenados

aux = A[i]; // se reordenan


A[i] = A[i - salto];
A[i - salto] = aux;
cambios = true; // y se marca como cambio.
}
}
}
}
}

1.3EJEMPLO ORDENAR ARREGLO


1 2 6 4 8 5 9 3 7 1
PASO # 1

Se divide la lista o el arreglo en n/2 grupos de a dos, considerando un incremento o


salto entre los elementos de n/2

PASO # 2

Cada grupo se clasifica, comparando los elementos y si no están ordenados se


intercambian.

PASO # 3

Nuevamente se divide el arreglo o lista a la mitad en grupos de n/4, se clasifican los


grupos y si no están ordenados se intercambian.

PASO # 4

Así sucesivamente, se continua dividiendo el arreglo a la mitad de grupos con


respecto al recorrido anterior con un incremente de salto decreciente en la mitad que
el salto anterior y después clasificando cada grupo por separado .

PASO # 5
Hasta que el algoritmo alcanza el tamaño de salto 1.

1.4Comparación

1.5Bibliografía
 Enciclopedia cubana Ecuraed método de ordenamiento shellsort.
 Sito web:http://puntocomnoesunlenguaje.blogspot.com/2014/09/metodo-shell-de-
ordenacion.html
 Sitoweb:https://www.google.com/search?q=%C2%BFC
%C3%B3mo+funciona+el+m%C3%A9todo+Shell+en+Java?&client=firefox-b-
d&sa=X&tbm=isch&source=iu&ictx=1&fir=FmPWkkxO8yZ-mM
%252CZrPJPrT5UMBKtM%252C_&vet=1&usg=AI4_-kSC6ODOKJ2Kmv7TP-
JwWBCe7PZZww&ved=2ahUKEwiYyezzs-
L0AhVrQjABHagoDFgQ9QF6BAgIEAE&biw=1280&bih=606&dpr=0.8#imgrc=FmP
WkkxO8yZ-mM
 Sito web:http://puntocomnoesunlenguaje.blogspot.com/2014/09/metodo-shell-de-
ordenacion.html

Potrebbero piacerti anche