SlideShare una empresa de Scribd logo
1 de 48
Introduccion al Analisis y Diseño de Algoritmos Logica y Analisis de Algoritmos Francisco Lambert 2010-1
Analisis de Algoritmos ,[object Object],[object Object],[object Object]
Analisis de Algoritmos ,[object Object]
Analisis de Algoritmos ,[object Object]
Analisis de Algoritmos ,[object Object],[object Object]
Analisis de Algoritmos ,[object Object],[object Object]
Analisis de Algoritmos ,[object Object]
Analisis de Algoritmos ,[object Object]
Analisis de Algoritmos ,[object Object],[object Object]
Analisis de Algoritmos ,[object Object]
Analisis de Algoritmos ,[object Object]
Analisis del Peor Caso ,[object Object]
Analisis de Casos ,[object Object],[object Object],[object Object],[object Object]
Analisis de Casos ,[object Object],[object Object]
Analisis de Casos
Analisis de Casos ,[object Object]
Analisis de Casos
Analisis de Casos
Analisis de Casos
Ejemplo: Algoritmo de ordenación por inserción  void OrdenarInsercion (double v[], int N)  {  int i, j;  double tmp;  for (i=1; i<N; i++) {  tmp = v[i];  for (j=i; (j>0) && (tmp<v[j-1]); j--)  v[j] = v[j-1];  v[j] = tmp;  }  }
Analisis de Casos ,[object Object],[object Object],[object Object],[object Object]
Analisis de Casos ,[object Object],[object Object]
Analisis de Casos ,[object Object],[object Object],[object Object],[object Object]
Resolucion de Recurrencias ,[object Object],[object Object],[object Object],[object Object],[object Object]
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Teorema Maestro θ(orden exacto), O (orden superior), Ω(orden inferior),(Notacion de Landau)
Teorema Maestro Ejercicios 1. T (n)=3T (n/2)+ n^2 2. T (n)=4T (n/2)+ n^2 3. T (n)= T (n/2)+2^n 4. T (n)=2nT (n/2)+ n^n 5. T (n)=16T (n/4)+ n 6. T (n)=2T (n/2)+ n log n 7. T (n)=2T (n/2)+ n/ logn 8. T (n)=2T (n/4)+ n^0.51 9. T (n)=0.5T (n/2)+1/n 10. T (n)=16T (n/4)+ n! 11. T (n)=√(2)*T(n/2)+log n 12. T (n)=3T (n/2)+ n 13. T (n)=3T (n/3)+ √n 14. T (n)=4T (n/2)+ cn 15. T (n)=3T (n/4)+ n log n 16. T (n)=3T (n/3)+ n/2 17. T (n)=6T (n/3)+ n^2 log n 18. T (n)=4T (n/2)+ n/ log n 19. T (n)=64T (n/8)− n^2 log n 20. T (n)=7T (n/3)+ n^2 21. T (n)=4T (n/2)+log n 22. T (n)= T (n/2)+ n(2 − cos n)
Teorema Maestro Ejercicios
Teorema Maestro Ejercicios
Algoritmos de Ordenamiento Dado un conjunto de n elementos (a1,a2,...,an) y una relacion de orden total entre dichos elementos (> por ejemplo) el problema de ordenar el conjunto de elementos se reduce a realizar permutaciones sobre el conjunto numerico con tal de ordenar dichos elementos en forma de que cumplan la relacion de orden total definida anteriormente. Aunque tanto el tipo y tamaño de los elementos como el dispositivo en donde se  encuentran almacenados pueden influir en el método que utilicemos para ordenarlos, en este tema vamos a solucionar el caso en que los elementos son  números enteros y se encuentran almacenados en un vector.
Algoritmos de Ordenamiento Existen muchos algoritmos de ordenamientos. MUCHOS. Algunos de los mas conocidos son Bubble sort, Insertion sort  , Shell sort, Merge sort , Heapsort , Quicksort , Counting Sort , Bucket sort , Radix sort ,  Distribution sort , etc etc etc De momento, estudiaremos Mergesort (ordenamiento mediante Mezcla) y ShellSort (derivacion de InsertSort).
Ordenando por Mezcla o MergeSort ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ordenando por Mezcla o MergeSort algoritmo insertSort( A : lista de elementos ordenables ) para i=1 hasta longitud(A) hacer index=A[i] j=i-1 mientras j>=0 y A[j]>index hacer A[j + 1] = A[j] j = j - 1 fin mientras A[j + 1] = index fin para fin algoritmo
Ordenando Shell o ShellSort Tomemos un arreglo inicial con los datos [ 74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30 ] . Shell nos propone que hagamos sobre el arreglo una serie de ordenaciones basadas en la inserción directa, pero dividiendo el arreglo original en varios sub-arreglo tales que cada elemento esté separado  k  elementos del anterior (a esta separación a menudo se le llama  sa lto  o  gap )... Se debe empezar con  k=n/2 , siendo n el número de elementos de arreglo, y utilizando siempre la división entera.... después iremos variando k haciéndolo más pequeño mediante sucesivas divisiones por 2, hasta llegar a k=1. Pero vamos a ello... En nuestro ejemplo, n=11 (porque hay 11 elementos). Así que k=n/2=11/2=5 (division entera )
Ordenando Shell o ShellSort Empezamos con k=5. Así pues, vamos a dividir nuestro arreglo original en 5 sub-arreglo, en los cuales, sus elementos estarán separados por 5 lugares del arreglo original (el  salto  o  gap  es 5). Vamos a hacerlo con colores. Tomamos el primer elemento (el 74) contamos 5 lugares y tomamos también otro elemento (el 97) volvemos a contar 5 y tomamos otro (el 30) y acabamos porque se nos acaba el arreglo. El primer sub-arreglo con k=5 es el formado por 74, 97 y 30. Vamos a pintarlos en rojo [ 74 , 14, 21, 44, 38,   97 , 11, 78, 65, 88,  30 ]
Ordenando Shell o ShellSort Ahora, ordenaremos los elementos del sub-arreglo rojo pero sólo entre ellos, utilizando el algoritmo de Inserción directa.   30 , 14, 21, 44, 38,  74 , 11, 78, 65, 88,   97   Fíjate qué curioso. El 30, un elemento relativamente pequeño se ha ido hacia el principio y el 97 hacia el final... ¡pero dando  saltos  ( gap )   de 5 en 5 lugares! Cada uno ha avanzado en  saltos  de 5 hacia una posición cercana a su ubicación definitiva.
Ordenando Shell o ShellSort El 30, un elemento relativamente pequeño se ha ido hacia el principio y el 97 hacia el final... ¡pero dando  saltos  ( gap )   de 5 en 5 lugares! Cada uno ha avanzado en  saltos  de 5 hacia una posición cercana a su ubicación definitiva. Formemos ahora otro sub-arreglo con salto k=5... partiendo del segundo elemento (el 14) y contando 5 (tomamos también el 11) y ya está, porque se acaba el arreglo.   30 ,  14 , 21, 44, 38,   74 ,  11 , 78, 65, 88,  97
Ordenando Shell o ShellSort Ordenando la parte verde con InsertSort tenemos ahora   30 ,  11 ,  21 ,  44 ,  38 ,   74 ,  14 ,  78 ,  65 ,  88 ,  97 Ordenando de pasada la parte rosada que se mantiene igual , lo mismo ocurre con el naranjo y el celeste !. Hemos formado 5 sub-arreglos en los cuales los elementos están separados por 5 lugares (porque k=5). Hemos ordenado cada sub-arreglo por separado utilizando inserción directa, y hemos logrado que cada elemento se dirija hacia su ubicación definitiva en pasos de 5 lugares. Por supuesto, no hemos terminado todavía, pero resulta evidente que algunos elementos, como el 30, el 97 o el 11 han dado un gran salto y que no deben andar muy lejos de su sitio final.
Ordenando Shell o ShellSort Decimos ahora que el arreglo está 5-ordenado. Para continuar con el algoritmo, debemos ir reduciendo progresivamente k dividiéndolo sucesivamente por 2 y k-ordenando los sub-arreglos que nos salgan (recuerda que nos salen k sub-arreglo). Cuando lleguemos a k=1 habremos terminado.   Pero de momento, nuestra k valía 5, así que ahora k←k/2=5/2=2   Nuestra nueva k vale 2. Repetimos todo el tinglado, pero ahora nos saldrán 2 sub-arreglo cuyos elementos están separados por 2 lugares.
Ordenando Shell o ShellSort Decimos ahora que el arreglo está 5-ordenado. Para continuar con el algoritmo, debemos ir reduciendo progresivamente k dividiéndolo sucesivamente por 2 y k-ordenando los sub-arreglos que nos salgan (recuerda que nos salen k sub-arreglo). Cuando lleguemos a k=1 habremos terminado.   Pero de momento, nuestra k valía 5, así que ahora k←k/2=5/2=2   Nuestra nueva k vale 2. Repetimos todo el tinglado, pero ahora nos saldrán 2 sub-arreglo cuyos elementos están separados por 2 lugares.
Ordenando Shell o ShellSort ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ordenando Shell o ShellSort Sin embargo, las k-ordenaciones que hemos hecho (con k=5 y k=2) han hecho que cada elemento se aproximase con saltos de 5 y luego de 2 posiciones hacia su ubicación definitiva. Ahora que k=1 y que vamos a aplicar el algoritmo de inserción directa tal cual, haremos muchas menos comparaciones e intercambios que si lo hubiéramos aplicado con en arreglo tal como lo teníamos al empezar. El algoritmo de inserción directa se comporta tanto mejor cuanto más cerca está cada elemento de su sitio definitivo.   Finalmente, el arreglo queda de ésta manera:   11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97   Cada elemento descolocado ha tenido que moverse pocos lugares. Muchos de ellos ni siquiera se han movido.

Más contenido relacionado

La actualidad más candente

Teoria de la c.c.
Teoria de la c.c.Teoria de la c.c.
Teoria de la c.c.belmont402
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmoGaston Demundo
 
Resumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de AlgoritmosResumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de Algoritmosmarshalleitor
 
determinar si un numero es primo
determinar si un numero es primo determinar si un numero es primo
determinar si un numero es primo alexander diaz
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
U1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos ComplejidadU1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos Complejidadrezzaca
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSEvans Balcazar
 
Estructura de dato unidad 7
Estructura de dato unidad 7Estructura de dato unidad 7
Estructura de dato unidad 7lenithoz
 
19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facilDariana Acuariogv
 
Eficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa RamirezEficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa RamirezVanessa Ramirez
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosJuan Timoteo Cori
 
Unidad siete estructura de datos
Unidad siete estructura de datosUnidad siete estructura de datos
Unidad siete estructura de datosRené Sosa Arana
 
Clasificacion de los problemas
Clasificacion de los problemasClasificacion de los problemas
Clasificacion de los problemasJohnfornerod
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmosrehoscript
 

La actualidad más candente (20)

Teoria de la c.c.
Teoria de la c.c.Teoria de la c.c.
Teoria de la c.c.
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmo
 
Resumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de AlgoritmosResumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de Algoritmos
 
determinar si un numero es primo
determinar si un numero es primo determinar si un numero es primo
determinar si un numero es primo
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
U1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos ComplejidadU1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos Complejidad
 
Analisis Algoritmo
Analisis AlgoritmoAnalisis Algoritmo
Analisis Algoritmo
 
Complejidad de algoritmos
Complejidad de algoritmos Complejidad de algoritmos
Complejidad de algoritmos
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOS
 
Estructura de dato unidad 7
Estructura de dato unidad 7Estructura de dato unidad 7
Estructura de dato unidad 7
 
19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil
 
Eficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa RamirezEficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa Ramirez
 
Manual estructura de_datos_2010___h._caselli_g
Manual estructura de_datos_2010___h._caselli_gManual estructura de_datos_2010___h._caselli_g
Manual estructura de_datos_2010___h._caselli_g
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datos
 
Unidad siete estructura de datos
Unidad siete estructura de datosUnidad siete estructura de datos
Unidad siete estructura de datos
 
Clasificacion de los problemas
Clasificacion de los problemasClasificacion de los problemas
Clasificacion de los problemas
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmos
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 

Similar a Jflambert lyada - ayudantia matematicas discretas

Similar a Jflambert lyada - ayudantia matematicas discretas (20)

Unidad 1 1
Unidad 1   1Unidad 1   1
Unidad 1 1
 
Bus99
Bus99Bus99
Bus99
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2
 
Inf 2316(proyecto)
Inf 2316(proyecto)Inf 2316(proyecto)
Inf 2316(proyecto)
 
Algoritmos, Diagramas,Pseudocódigos
Algoritmos, Diagramas,Pseudocódigos Algoritmos, Diagramas,Pseudocódigos
Algoritmos, Diagramas,Pseudocódigos
 
Informe ordenamiento
Informe ordenamientoInforme ordenamiento
Informe ordenamiento
 
Algoritmos de ordeamiento
Algoritmos de ordeamientoAlgoritmos de ordeamiento
Algoritmos de ordeamiento
 
Algoritmos de ordenación
Algoritmos de ordenaciónAlgoritmos de ordenación
Algoritmos de ordenación
 
Informe
InformeInforme
Informe
 
Divide y Vencerás
Divide y VencerásDivide y Vencerás
Divide y Vencerás
 
Informe ordenamiento
Informe ordenamientoInforme ordenamiento
Informe ordenamiento
 
Informe ordenamiento
Informe ordenamientoInforme ordenamiento
Informe ordenamiento
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Ordenacion y busqueda
Ordenacion y busquedaOrdenacion y busqueda
Ordenacion y busqueda
 
Analisis de Algoritmos
Analisis de AlgoritmosAnalisis de Algoritmos
Analisis de Algoritmos
 
Algebra morelys lugo2
Algebra morelys lugo2Algebra morelys lugo2
Algebra morelys lugo2
 
Algoritmos Ordenamiento
Algoritmos OrdenamientoAlgoritmos Ordenamiento
Algoritmos Ordenamiento
 
Módulo 2
Módulo 2Módulo 2
Módulo 2
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Algoritmos de ordenación
Algoritmos de ordenaciónAlgoritmos de ordenación
Algoritmos de ordenación
 

Jflambert lyada - ayudantia matematicas discretas

  • 1. Introduccion al Analisis y Diseño de Algoritmos Logica y Analisis de Algoritmos Francisco Lambert 2010-1
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 16.
  • 20. Ejemplo: Algoritmo de ordenación por inserción void OrdenarInsercion (double v[], int N) { int i, j; double tmp; for (i=1; i<N; i++) { tmp = v[i]; for (j=i; (j>0) && (tmp<v[j-1]); j--) v[j] = v[j-1]; v[j] = tmp; } }
  • 21.
  • 22.
  • 23.
  • 24.
  • 32. Teorema Maestro θ(orden exacto), O (orden superior), Ω(orden inferior),(Notacion de Landau)
  • 33. Teorema Maestro Ejercicios 1. T (n)=3T (n/2)+ n^2 2. T (n)=4T (n/2)+ n^2 3. T (n)= T (n/2)+2^n 4. T (n)=2nT (n/2)+ n^n 5. T (n)=16T (n/4)+ n 6. T (n)=2T (n/2)+ n log n 7. T (n)=2T (n/2)+ n/ logn 8. T (n)=2T (n/4)+ n^0.51 9. T (n)=0.5T (n/2)+1/n 10. T (n)=16T (n/4)+ n! 11. T (n)=√(2)*T(n/2)+log n 12. T (n)=3T (n/2)+ n 13. T (n)=3T (n/3)+ √n 14. T (n)=4T (n/2)+ cn 15. T (n)=3T (n/4)+ n log n 16. T (n)=3T (n/3)+ n/2 17. T (n)=6T (n/3)+ n^2 log n 18. T (n)=4T (n/2)+ n/ log n 19. T (n)=64T (n/8)− n^2 log n 20. T (n)=7T (n/3)+ n^2 21. T (n)=4T (n/2)+log n 22. T (n)= T (n/2)+ n(2 − cos n)
  • 36. Algoritmos de Ordenamiento Dado un conjunto de n elementos (a1,a2,...,an) y una relacion de orden total entre dichos elementos (> por ejemplo) el problema de ordenar el conjunto de elementos se reduce a realizar permutaciones sobre el conjunto numerico con tal de ordenar dichos elementos en forma de que cumplan la relacion de orden total definida anteriormente. Aunque tanto el tipo y tamaño de los elementos como el dispositivo en donde se encuentran almacenados pueden influir en el método que utilicemos para ordenarlos, en este tema vamos a solucionar el caso en que los elementos son números enteros y se encuentran almacenados en un vector.
  • 37. Algoritmos de Ordenamiento Existen muchos algoritmos de ordenamientos. MUCHOS. Algunos de los mas conocidos son Bubble sort, Insertion sort , Shell sort, Merge sort , Heapsort , Quicksort , Counting Sort , Bucket sort , Radix sort , Distribution sort , etc etc etc De momento, estudiaremos Mergesort (ordenamiento mediante Mezcla) y ShellSort (derivacion de InsertSort).
  • 38.
  • 39. Ordenando por Mezcla o MergeSort algoritmo insertSort( A : lista de elementos ordenables ) para i=1 hasta longitud(A) hacer index=A[i] j=i-1 mientras j>=0 y A[j]>index hacer A[j + 1] = A[j] j = j - 1 fin mientras A[j + 1] = index fin para fin algoritmo
  • 40. Ordenando Shell o ShellSort Tomemos un arreglo inicial con los datos [ 74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 30 ] . Shell nos propone que hagamos sobre el arreglo una serie de ordenaciones basadas en la inserción directa, pero dividiendo el arreglo original en varios sub-arreglo tales que cada elemento esté separado k elementos del anterior (a esta separación a menudo se le llama sa lto o gap )... Se debe empezar con k=n/2 , siendo n el número de elementos de arreglo, y utilizando siempre la división entera.... después iremos variando k haciéndolo más pequeño mediante sucesivas divisiones por 2, hasta llegar a k=1. Pero vamos a ello... En nuestro ejemplo, n=11 (porque hay 11 elementos). Así que k=n/2=11/2=5 (division entera )
  • 41. Ordenando Shell o ShellSort Empezamos con k=5. Así pues, vamos a dividir nuestro arreglo original en 5 sub-arreglo, en los cuales, sus elementos estarán separados por 5 lugares del arreglo original (el salto o gap es 5). Vamos a hacerlo con colores. Tomamos el primer elemento (el 74) contamos 5 lugares y tomamos también otro elemento (el 97) volvemos a contar 5 y tomamos otro (el 30) y acabamos porque se nos acaba el arreglo. El primer sub-arreglo con k=5 es el formado por 74, 97 y 30. Vamos a pintarlos en rojo [ 74 , 14, 21, 44, 38, 97 , 11, 78, 65, 88, 30 ]
  • 42. Ordenando Shell o ShellSort Ahora, ordenaremos los elementos del sub-arreglo rojo pero sólo entre ellos, utilizando el algoritmo de Inserción directa.   30 , 14, 21, 44, 38, 74 , 11, 78, 65, 88, 97   Fíjate qué curioso. El 30, un elemento relativamente pequeño se ha ido hacia el principio y el 97 hacia el final... ¡pero dando saltos ( gap ) de 5 en 5 lugares! Cada uno ha avanzado en saltos de 5 hacia una posición cercana a su ubicación definitiva.
  • 43. Ordenando Shell o ShellSort El 30, un elemento relativamente pequeño se ha ido hacia el principio y el 97 hacia el final... ¡pero dando saltos ( gap ) de 5 en 5 lugares! Cada uno ha avanzado en saltos de 5 hacia una posición cercana a su ubicación definitiva. Formemos ahora otro sub-arreglo con salto k=5... partiendo del segundo elemento (el 14) y contando 5 (tomamos también el 11) y ya está, porque se acaba el arreglo.   30 , 14 , 21, 44, 38, 74 , 11 , 78, 65, 88, 97
  • 44. Ordenando Shell o ShellSort Ordenando la parte verde con InsertSort tenemos ahora   30 , 11 , 21 , 44 , 38 , 74 , 14 , 78 , 65 , 88 , 97 Ordenando de pasada la parte rosada que se mantiene igual , lo mismo ocurre con el naranjo y el celeste !. Hemos formado 5 sub-arreglos en los cuales los elementos están separados por 5 lugares (porque k=5). Hemos ordenado cada sub-arreglo por separado utilizando inserción directa, y hemos logrado que cada elemento se dirija hacia su ubicación definitiva en pasos de 5 lugares. Por supuesto, no hemos terminado todavía, pero resulta evidente que algunos elementos, como el 30, el 97 o el 11 han dado un gran salto y que no deben andar muy lejos de su sitio final.
  • 45. Ordenando Shell o ShellSort Decimos ahora que el arreglo está 5-ordenado. Para continuar con el algoritmo, debemos ir reduciendo progresivamente k dividiéndolo sucesivamente por 2 y k-ordenando los sub-arreglos que nos salgan (recuerda que nos salen k sub-arreglo). Cuando lleguemos a k=1 habremos terminado.   Pero de momento, nuestra k valía 5, así que ahora k←k/2=5/2=2   Nuestra nueva k vale 2. Repetimos todo el tinglado, pero ahora nos saldrán 2 sub-arreglo cuyos elementos están separados por 2 lugares.
  • 46. Ordenando Shell o ShellSort Decimos ahora que el arreglo está 5-ordenado. Para continuar con el algoritmo, debemos ir reduciendo progresivamente k dividiéndolo sucesivamente por 2 y k-ordenando los sub-arreglos que nos salgan (recuerda que nos salen k sub-arreglo). Cuando lleguemos a k=1 habremos terminado.   Pero de momento, nuestra k valía 5, así que ahora k←k/2=5/2=2   Nuestra nueva k vale 2. Repetimos todo el tinglado, pero ahora nos saldrán 2 sub-arreglo cuyos elementos están separados por 2 lugares.
  • 47.
  • 48. Ordenando Shell o ShellSort Sin embargo, las k-ordenaciones que hemos hecho (con k=5 y k=2) han hecho que cada elemento se aproximase con saltos de 5 y luego de 2 posiciones hacia su ubicación definitiva. Ahora que k=1 y que vamos a aplicar el algoritmo de inserción directa tal cual, haremos muchas menos comparaciones e intercambios que si lo hubiéramos aplicado con en arreglo tal como lo teníamos al empezar. El algoritmo de inserción directa se comporta tanto mejor cuanto más cerca está cada elemento de su sitio definitivo.   Finalmente, el arreglo queda de ésta manera:   11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97   Cada elemento descolocado ha tenido que moverse pocos lugares. Muchos de ellos ni siquiera se han movido.