SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
Algoritmos y Estructura de Datos I                    Ing. Rolf Pinto López




                                   Algoritmos
                                        y
                              Estructura de Datos I




                                                                              1
Algoritmos y Estructura de Datos I                                                                       Ing. Rolf Pinto López




Algoritmos de ORDENACIÓN NO RECURSIVOS .................................................................. 3

ordenamiento ............................................................................................................... 3

Conceptos Preliminares .................................................................................................. 3

Cuándo APLICAR un método ........................................................................................... 3

Tipos de ordenamientos ................................................................................................. 5

internos ....................................................................................................................... 5

externos ....................................................................................................................... 5

Clasificación de los algoritmos de ordenamiento ................................................................ 6

Algoritmo Burbuja ......................................................................................................... 7

  PSEUDOCÓDIGO......................................................................................................... 7

  CÓDIGO EN C++ ........................................................................................................ 7

Algoritmo Inserción ....................................................................................................... 8

  PSEUDOCÓDIGO......................................................................................................... 8

  CÓDIGO EN C++ ........................................................................................................ 8

Algoritmo Selección ..................................................................................................... 10

  PSEUDOCÓDIGO....................................................................................................... 10

  CÓDIGO EN C++ ...................................................................................................... 10

Algoritmo Shake .......................................................................................................... 12

  PSEUDOCÓDIGO....................................................................................................... 12

  CÓDIGO EN C++ ...................................................................................................... 12

Algoritmo SHELL ......................................................................................................... 15

  PSEUDOCÓDIGO....................................................................................................... 15

  CÓDIGO EN C++ ...................................................................................................... 16

Ejercicios de aplicación ................................................................................................. 17

Objetivos .................................................................................................................... 17




                                                                                                                                 2
Algoritmos y Estructura de Datos I                                         Ing. Rolf Pinto López


ALGORITMOS DE ORDENACIÓN NO RECURSIVOS


ORDENAMIENTO
El ordenamiento es una labor común que realizamos cotidianamente, es un proceso tan común
en nuestras vidas que no nos detenemos a meditar mucho en ello. Ordenar es meramente
colocar información de una manera especial basándonos en un criterio de ordenamiento.

En la ciencia de la computación el ordenamiento de datos también cumple un rol muy
importante, ya sea como un fin en sí o como parte de otros procedimientos más complejos. Se
han desarrollado muchas técnicas en este ámbito, cada una con características específicas, y
con ventajas y desventajas sobre las demás. El propósito principal de un ordenamiento es el
de facilitar la búsqueda de información.

El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en
una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso
alfanumérico, ascendente o descendente.



CONCEPTOS PRELIMINARES
Antes de comenzar a ver cada algoritmo vamos a ponernos de acuerdo en algunos conceptos,
para que no haya confusiones:

•   Clave: La parte de un registro por la cual se ordena la lista. Por ejemplo, una lista de
    registros con campos nombre, dirección y teléfono se puede ordenar alfabéticamente de
    acuerdo al nombre. En este caso los campos dirección y teléfono no se toman en cuenta en
    el ordenamiento.

•   Criterio de ordenamiento o de comparación: El criterio que utilizamos para asignar
    orden a los registros con base en una o más claves. De esta manera decidimos si un
    registro es mayor o menor que otro.

•   Registro: Un grupo de datos que forman la lista. Pueden ser datos primitivos enteros,
    caracteres, reales, etc., o grupos de ellos, que en C++ equivalen a estructuras de datos.



CUÁNDO APLICAR UN MÉTODO
Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el factor
tiempo.

Al estudiar algoritmos de todo tipo, no sólo de ordenamiento, es bueno tener una forma de
evaluarlos antes de pasarlos a código. De esta manera podremos decidir cuál se adapta mejor
a los requerimientos de nuestro programa. Así que veamos estos aspectos:

•   Estabilidad: Cómo se comporta con registros que tienen claves iguales. Algunos
    algoritmos mantienen el orden relativo entre éstos y otros no. Veamos un ejemplo. Si
    tenemos la siguiente lista de datos:

    (Nombre, Edad)

    Pedro 19, Juan 23, Felipe 15, Marcela 20, Juan 18, Marcela 17



                                                                                                   3
Algoritmos y Estructura de Datos I                                        Ing. Rolf Pinto López


    Ordenada alfabéticamente por el nombre con un algoritmo estable quedaría así:

    Felipe 15, Marcela 20, Marcela 17, Juan 23, Juan 18, Pedro 19

    Un algoritmo no estable podría dejar a Juan 18 antes de Juan 23, o a Marcela 20
    después de Marcela 17.

    Tiempo de ejecución: La complejidad del algoritmo, que no tiene que ver con dificultad
    del algoritmo, mas bien con el rendimiento o la eficiencia del algoritmo. Es una función
    independiente de la implementación o de los factores externos. Tendremos que identificar
    una operación fundamental que realice nuestro algoritmo, que en este caso es comparar.
    Ahora contamos cuántas veces el algoritmo necesita comparar. Si en una lista de n
    términos realiza n comparaciones la complejidad es O(n). Una medida de eficiencia es:

    •   Contar el número de comparaciones

    •   Contar el número de movimientos de ítems

    •   Estos están en función del número de elementos a ser ordenados.

    •   Un buen algoritmo de ordenamiento requiere de O(n log n) comparaciones.

    Requerimientos de memoria: El algoritmo puede necesitar memoria adicional para
    realizar su labor. En general es preferible que no sea así, pero es común en la
    programación tener que sacrificar memoria por rendimiento.




                                                                                                  4
Algoritmos y Estructura de Datos I                                          Ing. Rolf Pinto López




TIPOS DE ORDENAMIENTOS


INTERNOS
Los datos a ordenar están en memoria la principal RAM, por lo que se asume que el tiempo
que se requiere para acceder cualquier elemento sea el mismo.


                                               Inserción Directa
 Inserción Directa
                                               Inserción Binaria


 Selección Directa                             Selección Directa


                                               Burbuja
 Intercambio Directo
                                               Shake


 Inserción Disminución Incremental             Shell


                                               Heap
 Ordenamiento De Árbol
                                               Tournament


 Sort Particionado                             Quick Sort

 Merge Sort

 Radix Sort

 Cálculo De Dirección




EXTERNOS
Los datos a ordenar están en la memoria secundaria, es decir, disco duro, disco extraíble, por
lo que se asume que el tiempo que se requiere para acceder a cualquier elemento depende de
la última posición consultada.

 Straight Merging

 Natural Merging

 Balanced Multiway Merging



                                                                                                    5
Algoritmos y Estructura de Datos I                                         Ing. Rolf Pinto López



 Polyphase Sort

 Distribution Of Initial Runs




CLASIFICACIÓN DE LOS ALGORITMOS DE ORDENAMIENTO
                                        Inserción Directa
                                        Shell
 Algoritmos de inserción:
                                        Inserción Binaria
                                        Hashing

                                        Burbuja
 Algoritmos de intercambio:             Shake
                                        Quick Sort

 Algoritmos de selección:               Selección Directa

                                        Merge
 Algoritmos de enumeración:             Radix
                                        Heap

Los métodos simples son: Inserción Directa, Selección, Burbuja y Shell, en dónde el último es
una extensión al método de Inserción, siendo más rápido. Los métodos más complejos son
Quick Sort y Heap.




                                                                                                   6
Algoritmos y Estructura de Datos I                                          Ing. Rolf Pinto López




ALGORITMO BURBUJA
Bubble Sort recorre el arreglo intercambiando los elementos adyacentes que estén
desordenados. Recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente lo
que hace es tomar el elemento mayor y lo coloca en las últimas posiciones o tomar el menor y
colocarlo en las primeras posiciones.

PSEUDOCÓDIGO
ALGORITMO BURBUJA
INICIO
ENTERO X, Z, ARREGLO[N]
X    0
MIENTRAS(X < N)
{
      Z    N
      MIENTRAS(Z >= 0)
      {
            SI(ARREGLO[Z] < ARREGLO[Z-1])
            {
                  INTERCAMBIO(ARREGLO[Z],ARREGLO[Z-1])
            }
        Z   Z – 1
      }
X    X + 1
}
FIN

CÓDIGO EN C++
void burbuja(void)
{
int x, z, aux, ARREGLO[N];
x = 0;
     while(x < N)
     {
           z = N;
           while(z >= 0)
           {
                if(ARREGLO[z] < ARREGLO[z - 1])
                {
                      aux = ARREGLO[z];
                      ARREGLO[z] = ARREGLO[z - 1];
                      ARREGLO[z - 1] = aux;
                }
           z--;
           }
     x++;
     }
}

Tiempo de ejecución: El ciclo interno se ejecuta n veces. El ciclo externo también se ejecuta
n veces, la complejidad es n * n = O (n2). El comportamiento del caso promedio depende del
orden de entrada de los datos, pero es sólo un poco mejor que el del peor caso, y sigue siendo
O (n2).



                                                                                                    7
Algoritmos y Estructura de Datos I                                       Ing. Rolf Pinto López


Estabilidad: No intercambia registros con claves iguales.

Ventajas:

    •   Fácil implementación.
    •   No requiere memoria adicional.

Desventajas:

    •   Muy lento.
    •   Muchas comparaciones.
    •   Muchos intercambios.



ALGORITMO INSERCIÓN
Este método consiste en insertar un elemento en una parte ya ordenada del vector y comenzar
de nuevo con los elementos restantes. Este también es un algoritmo lento, pero puede ser de
utilidad para listas semiordenadas, pues en ese caso realiza pocos desplazamientos.

PSEUDOCÓDIGO
ALGORITMO INSERCIÓN
INICIO
ENTERO X, Z, AUX, ARREGLO[N]
LOGICO B
     PARA(X     1, HASTA N, X      X + 1)
     {
     AUX     ARRAY[X]
     Z    X - 1
     B    FALSO
           MIENTRAS(B = FALSO Y Z >= 0)
           {
                 SI(AUX < ARREGLO[Z])
                 {
                       ARREGLO[Z + 1]     ARREGLO[Z]
                       Z     Z – 1
                 }
                 SI NO
                 {
                       B     VERDAD
                 }
           }
     ARREGLO[Z + 1]      AUX
}
FIN

CÓDIGO EN C++
void insercion(void)
{
int x,z, aux, ARREGLO[N];
bool b;
     for(x = 1; x < N; x++)
     {
     aux = ARREGLO[x];
     z = x - 1;

                                                                                                 8
Algoritmos y Estructura de Datos I                                                Ing. Rolf Pinto López


            flag = false;
                 while(b == false && z >= 0)
                 {
                       if(aux < ARREGLO[z])
                       {
                            ARREGLO[z + 1] = ARREGLO[z];
                            z--;
                       }
                       else
                            b = true;
                 }
            ARREGLO[z + 1] = aux;
            }
}

Ejemplo:


     [0]      15   15     10     10       10   10   10   10   10   10   10   10   10      10     7

     [1]      10    15    15     15       15   14   14   14   14   11   11   11   11       10   10

     [2]      14   14     14         15   15   15   15   14   14   14   14   14    11     11    11

     [3]      11   11     11     11       11   11   15   15   15   15   15   14   14      14    14

     [4]       7    7      7         7    7    7    7    7    7    7    15   15   15      15    15



        X      1           2                   3                   4                             5

        Z      0    -1     1         0         2    1    0         3    2    1     0      -1     4

        B      F           F              T    F              T    F                             F

    AUX       10          14                   11                  7                             ?


Tiempo de Ejecución: Para una lista de n elementos el ciclo externo se ejecuta n-1 veces. El
ciclo interno se ejecuta como máximo 1, 2, 3 veces a la tercera iteración, etc., esto tratándose
del peor caso posible. Esto produce una complejidad O(n2).

Estabilidad: No intercambia registros con claves iguales. Por lo tanto es estable.

Ventajas:

    •       Fácil implementación.
    •       Requerimientos mínimos de memoria.

Desventajas:

    •       Lento.
    •       Numerosas comparaciones.




                                                                                                          9
Algoritmos y Estructura de Datos I                                           Ing. Rolf Pinto López




ALGORITMO SELECCIÓN
El método de ordenamiento por selección consiste en encontrar el menor de todos los
elementos del arreglo e intercambiarlo con el que está en la primera posición y así excluirlo de
la lista. Luego el segundo mas pequeño, y así sucesivamente hasta ordenar todo el arreglo.

Es un algoritmo lento, a pesar que sólo realiza un intercambio en cada ejecución del ciclo
externo, puede ser una buena elección para listas con registros grandes y claves pequeñas.

PSEUDOCÓDIGO
ALGORITMO SELECCIÓN
INICIO
ENTERO I, J, MIN, ARREGLO[N]
I    0
      MIENTRAS(I < N)
      {
            MIN     I
            J    I + 1
            MIENTRAS(J < N)
            {
                  SI(ARREGLO[J] < ARREGLO[I])
                  {
                  MIN    J
                  INTERCAMBIA(ARREGLO[MIN],ARREGLO[I])
                  }
            J    J + 1
            }
      I    I + 1
}
FIN

CÓDIGO EN C++
void seleccion(void)
{
int i, j, min, ARREGLO[N], aux;
i = 0
      while(i < N)
      {
           min = i;
           j = i + 1;
           while (j < N)
           {
                 if(ARREGLO[j] < ARREGLO[i])
                 {
                      min = j;
                      aux = ARREGLO[i];
                      ARREGLO[i] = ARREGLO[min];
                      ARREGLO[min] = aux;
                 }
           j++;
           }
      i++;
      }
}


                                                                                                10
Algoritmos y Estructura de Datos I                                                Ing. Rolf Pinto López




Ejemplo:


[0]       15    10     10     10      7   7    7    7     7      7     7     7        7       7       7

[1]       10    15     15     15     15   15   14    11    10   10    10    10        10     10      10

[2]       14   14      14     14     14   14   15   15    15    15     14    11       11     11      11

[3]       11   11      11     11     11   11   11    14   14    14     15   15        15      14     14

[4]       7     7      7       7     10   10   10   10     11   11    11     14       14      15     15



 I        0     0      0       0     0    1    1    1     1      2     2     2        3       3       4

 J        1     1      2       3     4    2    2    3     4      3     3     4        4       4       5

MIN       0     0      1       1     4    1    2    3     4      2     3     4        3       4       4


Tiempo de Ejecución: El ciclo externo se ejecuta n veces para una lista de n elementos.
Cada búsqueda requiere comparar todos los elementos no clasificados. Luego la complejidad
es O(n2). Este algoritmo presenta un comportamiento constante independiente del orden de
los datos.

Estabilidad: Puede que haya algo de discrepancia pero esta implementación parece ser
estable, puede verificar esto ordenando un conjunto de datos que tenga un par de ellos con la
misma clave, el orden relativo entre ellos es conservado, pero algunos autores dicen que no es
estable.

Ventajas:

      •   Fácil implementación.
      •   No requiere memoria adicional.
      •   Realiza pocos intercambios.
      •   Rendimiento constante: poca diferencia entre el peor y el mejor caso.

Desventajas:

      •   Lento.
      •   Realiza numerosas comparaciones.




                                                                                                     11
Algoritmos y Estructura de Datos I                                       Ing. Rolf Pinto López




ALGORITMO SHAKE
Conocido como doble ordenamiento de burbuja; recorre el arreglo intercambiando los
elementos adyacentes que estén desordenados. Se recorre el arreglo tantas veces hasta que
ya no haya cambios. Prácticamente lo que hace es tomar el elemento mayor y lo coloca en su
posición y al mismo tiempo también coloca el elemento menor en su posición.

PSEUDOCÓDIGO
ALGORITMO SHAKE
INICIO
     ENTERO I     0, ARREGLO[N]
     ENTERO K     N - 1
     ENTERO MIN, MAX, J, AUX
     MIENTRAS(I < K)
     {
           MIN    I
           MAX    I
           PARA(J    I + 1, HASTA K, J   J + 1)
           {
                SI(ARREGLO[J] < ARREGLO[MIN])
                {
                      MIN    J
                }
                SI(ARREGLO[J] > ARREGLO[MAX])
                {
                      MAX    J
                }
           }

        AUX    ARREGLO[MIN]
        ARREGLO[MIN]    ARREGLO[I]
        ARREGLO[I]    AUX
             SI(MAX    I)
             {
                   AUX    ARREGLO[MIN]
                   ARREGLO[MIN]    ARREGLO[K]
                   ARREGLO[K]    AUX
             }
             SI NO
             {
                   AUX    ARREGLO[MAX]
                   ARREGLO[MAX]    ARREGLO[K]
                   ARREGLO[K]    AUX
             }
             I    I + 1;
             K    K - 1;
        }
}

CÓDIGO EN C++
void shake(void)


                                                                                            12
Algoritmos y Estructura de Datos I                                  Ing. Rolf Pinto López


{
        int i = 0, ARREGLO[N];
        int k = N - 1;
        int min, max, j, aux;
        while (i < k)
        {
             min = i;
             max = i;
             for(j = i + 1; j <= k; j++)
             {
                   if (ARREGLO[j] < ARREGLO[min])
                        min = j;
                   if (ARREGLO[j] > ARREGLO[max])
                        max = j;
             }
        aux = ARREGLO[min];
        ARREGLO[min] = ARREGLO[i];
        ARREGLO[i] = aux;
             if (max == i)
             {
                   aux = ARREGLO[min];
                   ARREGLO[min] = ARREGLO[k];
                   ARREGLO[k] = aux;
             }
             else
             {
                   aux = ARREGLO[max];
                   ARREGLO[max] = ARREGLO[k];
                   ARREGLO[k] = aux;
             }
             i++;
             k--;
        }
}

Ejemplo:


                       [0]     15             7            7

                       [1]     10            10            10

                       [2]     14            14            11

                       [3]     11            11            14

                       [4]      7             15           15



                        I       0                  1            2

                        K       4                  3            2

                        J       1    2   3   4     2   3   4    3




                                                                                       13
Algoritmos y Estructura de Datos I                                              Ing. Rolf Pinto López



                      MIN       0    1          4     1                     2

                      MAX       0                     1    2                2


Tiempo de ejecución:

                               n                                     n 
El bucle interno se efectuará   + 1 ; el bucle interior se ejecutará  + 1 entonces por la
                               2                                     2 
                                   n  n 
regla de la multiplicación tenemos  + 1 *  + 1 ⇒ O(n2)
                                   2  2 

Ventajas:

    •   Relativamente fácil de implementar.
    •   No requiere memoria adicional.

Estabilidad: Es inestable no mantiene el orden relativo de los registros.

Desventajas:

    •   Realiza numerosas comparaciones.
    •   Realiza numerosos intercambios.




                                                                                                   14
Algoritmos y Estructura de Datos I                                           Ing. Rolf Pinto López




ALGORITMO SHELL
Ordenamiento por intervalos decrecientes, nombrado así debido a su inventor Donald Shell,
este algoritmo ordena subgrupos de elementos separados K unidades respecto de su posición
en el arreglo. El valor K es llamado intervalo. Después de que los primeros K subgrupos fueron
ordenados generalmente utilizando Inserción Directa, se escoge un nuevo valor de K más
pequeño, y el arreglo es de nuevo partido entre el nuevo conjunto de subgrupos. Cada uno de
los subgrupos mayores es ordenado y el proceso se repite de nuevo con un valor más pequeño
de K.

Cuando el incremento toma un valor de 1, todos los elementos pasan a formar parte del
subgrupo y se aplica inserción directa. El método se basa en tomar como salto al principio N/2,
siendo N el número de elementos, y luego se va reduciendo a la mitad en cada repetición
hasta lograr un valor de 1.

PSEUDOCÓDIGO
ALGORITMO SHELL
INICIO
     ENTERO INTERVALO, K, J, I, AUX
     INTERVALO     N DIV 2
     MIENTRAS(INTERVALO > 0)
     {
           PARA(I    INTERVALO – 1, HASTA      N, I                I + 1)
           {
           J    I - INTERVALO
                 MIENTRAS(J >= 0)
                 {
                 K    J + INTERVALO
                       SI(VECTOR[K] <= VECTOR[J])
                       {
                             AUX    VECTOR[J]
                             VECTOR[J]    VECTOR[K]
                             VECTOR[K]    AUX
                       }
                       SI NO
                       {
                             J    0
                       }
                 J    J - INTERVALO
                 }
           }
           INTERVALO     INTERVALO DIV 2
     }
}




                                                                                                15
Algoritmos y Estructura de Datos I                                                            Ing. Rolf Pinto López



CÓDIGO EN C++
void shell(void)
{
     int intervalo, k, j, i, aux;
     intervalo = RANGO / 2;
     while(intervalo > 0)
     {
           for(i = intervalo - 1; i < RANGO; i++)
           {
           j = i - intervalo;
                 while(j >= 0)
                 {
                      k = j + intervalo;
                      if(vector[k] <= vector[j])
                      {
                            aux = vector[j];
                            vector[j] = vector[k];
                            vector[k] = aux;
                      }
                      else
                            j = 0;
                 j = j - intervalo;
                 ver_valores(vector);
                 }
           }
           intervalo = intervalo / 2;
     }
}

Ejemplo:

         [0]      15                           15   7                                7              7


         [1]      10                           10   10                               10             10


         [2]      14                           7    15                               11             11


         [3]      11                           11   11                               15             14


         [4]      7                            14   14                               14             15




          I       1         2         3        4              0    1        2        3              4


         J        -1   -2   0    -2   1   -2   2    0    -2   -1   0   -2   1   -2   2    1    -2   3    2    -2


         K        1         2         3        4    2         0    1        2        3    2         4    3


     INTERVALO    2         2         2        2              1    1        1        1              1




                                                                                                                   16
Algoritmos y Estructura de Datos I                                          Ing. Rolf Pinto López


Tiempo de ejecución:

                                              n
El bucle externo se ejecutará, el redondeo de   veces, el interno n veces, luego el bucle
                                              2
                                                                             n
mas interno depende de j ⇒ j O(n) la constante j se absorbe, luego tenemos O   * o(n) ⇒
                                                                             2
O(n2)

Ventajas:

    •   No requiere memoria adicional.
    •   Mejor rendimiento que el método de Inserción clásico

Estabilidad: Es inestable no mantiene el orden relativo de los registros.

Desventajas:

    •   Implementación algo confusa.
    •   Realiza numerosas comparaciones e intercambios.



EJERCICIOS DE APLICACIÓN


OBJETIVOS
A. Aplicar los diferentes métodos de ordenamiento a un grupo de datos, este grupo de datos
   estará constituido por un array de n elementos.
B. Analizar y criticar el desempeño de cada algoritmo respecto a sus semejantes teniendo en
   cuenta que todos son de carácter no recursivo.


1) Implemente el algoritmo de ordenación burbuja, mejore el rendimiento del algoritmo,
   centre su trabajo en el bucle interno.
2) Implemente el algoritmo de ordenación shake, ¿Qué mejoras le encuentra respecto al de
   burbuja?
3) Implemente el algoritmo de ordenación selección.
4) Implemente el algoritmo de ordenación inserción.
5) Implemente el algoritmo de ordenación shell. ¿Qué función cumplen los intervalos
   decrecientes de este algoritmo?
6) Implemente el algoritmo de orden Quick Sort


    ROLFPINTO@HOTMAIL.COM




                                                                                               17

Weitere ähnliche Inhalte

Was ist angesagt?

Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserciónAlvaro Enrique Ruano
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortlinkinpark03
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamientoLalo Chooper
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesJosé Antonio Sandoval Acosta
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Ordenamiento por monticulo (heapsort)
Ordenamiento por monticulo (heapsort)Ordenamiento por monticulo (heapsort)
Ordenamiento por monticulo (heapsort)edopaz
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento internoFernando Solis
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamientodeff000001
 
Prolog ejercicios resueltos
Prolog ejercicios resueltosProlog ejercicios resueltos
Prolog ejercicios resueltosJansel M
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en javamarhoz
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no linealeslos4estatidinamicos
 

Was ist angesagt? (20)

Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserción
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Listas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de DatosListas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de Datos
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sort
 
Informe insercion
Informe insercionInforme insercion
Informe insercion
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
Recursividad
RecursividadRecursividad
Recursividad
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
Mètodos de Ordenaciòn y bùsqueda
Mètodos de Ordenaciòn y bùsquedaMètodos de Ordenaciòn y bùsqueda
Mètodos de Ordenaciòn y bùsqueda
 
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
 
Ordenamiento por monticulo (heapsort)
Ordenamiento por monticulo (heapsort)Ordenamiento por monticulo (heapsort)
Ordenamiento por monticulo (heapsort)
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamiento
 
Prolog ejercicios resueltos
Prolog ejercicios resueltosProlog ejercicios resueltos
Prolog ejercicios resueltos
 
Algoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externoAlgoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externo
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en java
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no lineales
 

Ähnlich wie Algortimos De Ordenamiento

Ähnlich wie Algortimos De Ordenamiento (20)

Tema5
Tema5Tema5
Tema5
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y Busqueda
 
Ordenación y búsqueda orientada a C++
Ordenación y búsqueda orientada a C++Ordenación y búsqueda orientada a C++
Ordenación y búsqueda orientada a C++
 
Arreglos
ArreglosArreglos
Arreglos
 
Ordenacion y busqueda
Ordenacion y busquedaOrdenacion y busqueda
Ordenacion y busqueda
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Porto
PortoPorto
Porto
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Presentacion recursividad
Presentacion recursividadPresentacion recursividad
Presentacion recursividad
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Estructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaEstructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de Búsqueda
 
Unidad 1 1
Unidad 1   1Unidad 1   1
Unidad 1 1
 
Manual users algoritmos
Manual users   algoritmosManual users   algoritmos
Manual users algoritmos
 
Sepa01
Sepa01Sepa01
Sepa01
 
Sepa01
Sepa01Sepa01
Sepa01
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmo
 
clase 1 programacion biomedica.ppt
clase 1 programacion biomedica.pptclase 1 programacion biomedica.ppt
clase 1 programacion biomedica.ppt
 
Unidad 3 rcm
Unidad 3 rcmUnidad 3 rcm
Unidad 3 rcm
 

Mehr von Rolf Pinto

(PMBOK® Guide) – Fifth Edition
(PMBOK® Guide) – Fifth Edition(PMBOK® Guide) – Fifth Edition
(PMBOK® Guide) – Fifth EditionRolf Pinto
 
Marketing, KOTLER, PHILIP Y ARMSTRONG, GARY
Marketing, KOTLER, PHILIP Y ARMSTRONG, GARYMarketing, KOTLER, PHILIP Y ARMSTRONG, GARY
Marketing, KOTLER, PHILIP Y ARMSTRONG, GARYRolf Pinto
 
ERP – APLICACIÓN EN LA EMPRESA NACIONAL
ERP – APLICACIÓN EN LA EMPRESA NACIONALERP – APLICACIÓN EN LA EMPRESA NACIONAL
ERP – APLICACIÓN EN LA EMPRESA NACIONALRolf Pinto
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
UML Y PATRONES - GRAIG LARMAN
UML Y PATRONES - GRAIG LARMANUML Y PATRONES - GRAIG LARMAN
UML Y PATRONES - GRAIG LARMANRolf Pinto
 
UML - MANUAL DE REFERENCIA
UML - MANUAL DE REFERENCIAUML - MANUAL DE REFERENCIA
UML - MANUAL DE REFERENCIARolf Pinto
 
Analisis y Diseño de Sistemas - Kendal & Kendal - Tercera Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Tercera EdiciónAnalisis y Diseño de Sistemas - Kendal & Kendal - Tercera Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Tercera EdiciónRolf Pinto
 
UML Weekend Crash Course
UML Weekend Crash CourseUML Weekend Crash Course
UML Weekend Crash CourseRolf Pinto
 
Analisis y Diseño de Sistemas - Kendal & Kendal - Sexta Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Sexta EdiciónAnalisis y Diseño de Sistemas - Kendal & Kendal - Sexta Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Sexta EdiciónRolf Pinto
 
Microsoft Access 2007
Microsoft Access 2007Microsoft Access 2007
Microsoft Access 2007Rolf Pinto
 
Microsoft Word 2007
Microsoft Word 2007Microsoft Word 2007
Microsoft Word 2007Rolf Pinto
 

Mehr von Rolf Pinto (12)

(PMBOK® Guide) – Fifth Edition
(PMBOK® Guide) – Fifth Edition(PMBOK® Guide) – Fifth Edition
(PMBOK® Guide) – Fifth Edition
 
Marketing, KOTLER, PHILIP Y ARMSTRONG, GARY
Marketing, KOTLER, PHILIP Y ARMSTRONG, GARYMarketing, KOTLER, PHILIP Y ARMSTRONG, GARY
Marketing, KOTLER, PHILIP Y ARMSTRONG, GARY
 
ERP – APLICACIÓN EN LA EMPRESA NACIONAL
ERP – APLICACIÓN EN LA EMPRESA NACIONALERP – APLICACIÓN EN LA EMPRESA NACIONAL
ERP – APLICACIÓN EN LA EMPRESA NACIONAL
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
UML Y PATRONES - GRAIG LARMAN
UML Y PATRONES - GRAIG LARMANUML Y PATRONES - GRAIG LARMAN
UML Y PATRONES - GRAIG LARMAN
 
UML - MANUAL DE REFERENCIA
UML - MANUAL DE REFERENCIAUML - MANUAL DE REFERENCIA
UML - MANUAL DE REFERENCIA
 
Analisis y Diseño de Sistemas - Kendal & Kendal - Tercera Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Tercera EdiciónAnalisis y Diseño de Sistemas - Kendal & Kendal - Tercera Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Tercera Edición
 
UML Weekend Crash Course
UML Weekend Crash CourseUML Weekend Crash Course
UML Weekend Crash Course
 
UML Applied
UML AppliedUML Applied
UML Applied
 
Analisis y Diseño de Sistemas - Kendal & Kendal - Sexta Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Sexta EdiciónAnalisis y Diseño de Sistemas - Kendal & Kendal - Sexta Edición
Analisis y Diseño de Sistemas - Kendal & Kendal - Sexta Edición
 
Microsoft Access 2007
Microsoft Access 2007Microsoft Access 2007
Microsoft Access 2007
 
Microsoft Word 2007
Microsoft Word 2007Microsoft Word 2007
Microsoft Word 2007
 

Kürzlich hochgeladen

Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024IES Vicent Andres Estelles
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesYanirisBarcelDelaHoz
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOluismii249
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdfValeriaCorrea29
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSYadi Campos
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfUPTAIDELTACHIRA
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptxRigoTito
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIIsauraImbrondone
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptAlberto Rubio
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 

Kürzlich hochgeladen (20)

Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdf
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 

Algortimos De Ordenamiento

  • 1. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Algoritmos y Estructura de Datos I 1
  • 2. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Algoritmos de ORDENACIÓN NO RECURSIVOS .................................................................. 3 ordenamiento ............................................................................................................... 3 Conceptos Preliminares .................................................................................................. 3 Cuándo APLICAR un método ........................................................................................... 3 Tipos de ordenamientos ................................................................................................. 5 internos ....................................................................................................................... 5 externos ....................................................................................................................... 5 Clasificación de los algoritmos de ordenamiento ................................................................ 6 Algoritmo Burbuja ......................................................................................................... 7 PSEUDOCÓDIGO......................................................................................................... 7 CÓDIGO EN C++ ........................................................................................................ 7 Algoritmo Inserción ....................................................................................................... 8 PSEUDOCÓDIGO......................................................................................................... 8 CÓDIGO EN C++ ........................................................................................................ 8 Algoritmo Selección ..................................................................................................... 10 PSEUDOCÓDIGO....................................................................................................... 10 CÓDIGO EN C++ ...................................................................................................... 10 Algoritmo Shake .......................................................................................................... 12 PSEUDOCÓDIGO....................................................................................................... 12 CÓDIGO EN C++ ...................................................................................................... 12 Algoritmo SHELL ......................................................................................................... 15 PSEUDOCÓDIGO....................................................................................................... 15 CÓDIGO EN C++ ...................................................................................................... 16 Ejercicios de aplicación ................................................................................................. 17 Objetivos .................................................................................................................... 17 2
  • 3. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López ALGORITMOS DE ORDENACIÓN NO RECURSIVOS ORDENAMIENTO El ordenamiento es una labor común que realizamos cotidianamente, es un proceso tan común en nuestras vidas que no nos detenemos a meditar mucho en ello. Ordenar es meramente colocar información de una manera especial basándonos en un criterio de ordenamiento. En la ciencia de la computación el ordenamiento de datos también cumple un rol muy importante, ya sea como un fin en sí o como parte de otros procedimientos más complejos. Se han desarrollado muchas técnicas en este ámbito, cada una con características específicas, y con ventajas y desventajas sobre las demás. El propósito principal de un ordenamiento es el de facilitar la búsqueda de información. El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso alfanumérico, ascendente o descendente. CONCEPTOS PRELIMINARES Antes de comenzar a ver cada algoritmo vamos a ponernos de acuerdo en algunos conceptos, para que no haya confusiones: • Clave: La parte de un registro por la cual se ordena la lista. Por ejemplo, una lista de registros con campos nombre, dirección y teléfono se puede ordenar alfabéticamente de acuerdo al nombre. En este caso los campos dirección y teléfono no se toman en cuenta en el ordenamiento. • Criterio de ordenamiento o de comparación: El criterio que utilizamos para asignar orden a los registros con base en una o más claves. De esta manera decidimos si un registro es mayor o menor que otro. • Registro: Un grupo de datos que forman la lista. Pueden ser datos primitivos enteros, caracteres, reales, etc., o grupos de ellos, que en C++ equivalen a estructuras de datos. CUÁNDO APLICAR UN MÉTODO Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el factor tiempo. Al estudiar algoritmos de todo tipo, no sólo de ordenamiento, es bueno tener una forma de evaluarlos antes de pasarlos a código. De esta manera podremos decidir cuál se adapta mejor a los requerimientos de nuestro programa. Así que veamos estos aspectos: • Estabilidad: Cómo se comporta con registros que tienen claves iguales. Algunos algoritmos mantienen el orden relativo entre éstos y otros no. Veamos un ejemplo. Si tenemos la siguiente lista de datos: (Nombre, Edad) Pedro 19, Juan 23, Felipe 15, Marcela 20, Juan 18, Marcela 17 3
  • 4. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Ordenada alfabéticamente por el nombre con un algoritmo estable quedaría así: Felipe 15, Marcela 20, Marcela 17, Juan 23, Juan 18, Pedro 19 Un algoritmo no estable podría dejar a Juan 18 antes de Juan 23, o a Marcela 20 después de Marcela 17. Tiempo de ejecución: La complejidad del algoritmo, que no tiene que ver con dificultad del algoritmo, mas bien con el rendimiento o la eficiencia del algoritmo. Es una función independiente de la implementación o de los factores externos. Tendremos que identificar una operación fundamental que realice nuestro algoritmo, que en este caso es comparar. Ahora contamos cuántas veces el algoritmo necesita comparar. Si en una lista de n términos realiza n comparaciones la complejidad es O(n). Una medida de eficiencia es: • Contar el número de comparaciones • Contar el número de movimientos de ítems • Estos están en función del número de elementos a ser ordenados. • Un buen algoritmo de ordenamiento requiere de O(n log n) comparaciones. Requerimientos de memoria: El algoritmo puede necesitar memoria adicional para realizar su labor. En general es preferible que no sea así, pero es común en la programación tener que sacrificar memoria por rendimiento. 4
  • 5. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López TIPOS DE ORDENAMIENTOS INTERNOS Los datos a ordenar están en memoria la principal RAM, por lo que se asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo. Inserción Directa Inserción Directa Inserción Binaria Selección Directa Selección Directa Burbuja Intercambio Directo Shake Inserción Disminución Incremental Shell Heap Ordenamiento De Árbol Tournament Sort Particionado Quick Sort Merge Sort Radix Sort Cálculo De Dirección EXTERNOS Los datos a ordenar están en la memoria secundaria, es decir, disco duro, disco extraíble, por lo que se asume que el tiempo que se requiere para acceder a cualquier elemento depende de la última posición consultada. Straight Merging Natural Merging Balanced Multiway Merging 5
  • 6. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Polyphase Sort Distribution Of Initial Runs CLASIFICACIÓN DE LOS ALGORITMOS DE ORDENAMIENTO Inserción Directa Shell Algoritmos de inserción: Inserción Binaria Hashing Burbuja Algoritmos de intercambio: Shake Quick Sort Algoritmos de selección: Selección Directa Merge Algoritmos de enumeración: Radix Heap Los métodos simples son: Inserción Directa, Selección, Burbuja y Shell, en dónde el último es una extensión al método de Inserción, siendo más rápido. Los métodos más complejos son Quick Sort y Heap. 6
  • 7. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López ALGORITMO BURBUJA Bubble Sort recorre el arreglo intercambiando los elementos adyacentes que estén desordenados. Recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente lo que hace es tomar el elemento mayor y lo coloca en las últimas posiciones o tomar el menor y colocarlo en las primeras posiciones. PSEUDOCÓDIGO ALGORITMO BURBUJA INICIO ENTERO X, Z, ARREGLO[N] X 0 MIENTRAS(X < N) { Z N MIENTRAS(Z >= 0) { SI(ARREGLO[Z] < ARREGLO[Z-1]) { INTERCAMBIO(ARREGLO[Z],ARREGLO[Z-1]) } Z Z – 1 } X X + 1 } FIN CÓDIGO EN C++ void burbuja(void) { int x, z, aux, ARREGLO[N]; x = 0; while(x < N) { z = N; while(z >= 0) { if(ARREGLO[z] < ARREGLO[z - 1]) { aux = ARREGLO[z]; ARREGLO[z] = ARREGLO[z - 1]; ARREGLO[z - 1] = aux; } z--; } x++; } } Tiempo de ejecución: El ciclo interno se ejecuta n veces. El ciclo externo también se ejecuta n veces, la complejidad es n * n = O (n2). El comportamiento del caso promedio depende del orden de entrada de los datos, pero es sólo un poco mejor que el del peor caso, y sigue siendo O (n2). 7
  • 8. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Estabilidad: No intercambia registros con claves iguales. Ventajas: • Fácil implementación. • No requiere memoria adicional. Desventajas: • Muy lento. • Muchas comparaciones. • Muchos intercambios. ALGORITMO INSERCIÓN Este método consiste en insertar un elemento en una parte ya ordenada del vector y comenzar de nuevo con los elementos restantes. Este también es un algoritmo lento, pero puede ser de utilidad para listas semiordenadas, pues en ese caso realiza pocos desplazamientos. PSEUDOCÓDIGO ALGORITMO INSERCIÓN INICIO ENTERO X, Z, AUX, ARREGLO[N] LOGICO B PARA(X 1, HASTA N, X X + 1) { AUX ARRAY[X] Z X - 1 B FALSO MIENTRAS(B = FALSO Y Z >= 0) { SI(AUX < ARREGLO[Z]) { ARREGLO[Z + 1] ARREGLO[Z] Z Z – 1 } SI NO { B VERDAD } } ARREGLO[Z + 1] AUX } FIN CÓDIGO EN C++ void insercion(void) { int x,z, aux, ARREGLO[N]; bool b; for(x = 1; x < N; x++) { aux = ARREGLO[x]; z = x - 1; 8
  • 9. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López flag = false; while(b == false && z >= 0) { if(aux < ARREGLO[z]) { ARREGLO[z + 1] = ARREGLO[z]; z--; } else b = true; } ARREGLO[z + 1] = aux; } } Ejemplo: [0] 15 15 10 10 10 10 10 10 10 10 10 10 10 10 7 [1] 10 15 15 15 15 14 14 14 14 11 11 11 11 10 10 [2] 14 14 14 15 15 15 15 14 14 14 14 14 11 11 11 [3] 11 11 11 11 11 11 15 15 15 15 15 14 14 14 14 [4] 7 7 7 7 7 7 7 7 7 7 15 15 15 15 15 X 1 2 3 4 5 Z 0 -1 1 0 2 1 0 3 2 1 0 -1 4 B F F T F T F F AUX 10 14 11 7 ? Tiempo de Ejecución: Para una lista de n elementos el ciclo externo se ejecuta n-1 veces. El ciclo interno se ejecuta como máximo 1, 2, 3 veces a la tercera iteración, etc., esto tratándose del peor caso posible. Esto produce una complejidad O(n2). Estabilidad: No intercambia registros con claves iguales. Por lo tanto es estable. Ventajas: • Fácil implementación. • Requerimientos mínimos de memoria. Desventajas: • Lento. • Numerosas comparaciones. 9
  • 10. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López ALGORITMO SELECCIÓN El método de ordenamiento por selección consiste en encontrar el menor de todos los elementos del arreglo e intercambiarlo con el que está en la primera posición y así excluirlo de la lista. Luego el segundo mas pequeño, y así sucesivamente hasta ordenar todo el arreglo. Es un algoritmo lento, a pesar que sólo realiza un intercambio en cada ejecución del ciclo externo, puede ser una buena elección para listas con registros grandes y claves pequeñas. PSEUDOCÓDIGO ALGORITMO SELECCIÓN INICIO ENTERO I, J, MIN, ARREGLO[N] I 0 MIENTRAS(I < N) { MIN I J I + 1 MIENTRAS(J < N) { SI(ARREGLO[J] < ARREGLO[I]) { MIN J INTERCAMBIA(ARREGLO[MIN],ARREGLO[I]) } J J + 1 } I I + 1 } FIN CÓDIGO EN C++ void seleccion(void) { int i, j, min, ARREGLO[N], aux; i = 0 while(i < N) { min = i; j = i + 1; while (j < N) { if(ARREGLO[j] < ARREGLO[i]) { min = j; aux = ARREGLO[i]; ARREGLO[i] = ARREGLO[min]; ARREGLO[min] = aux; } j++; } i++; } } 10
  • 11. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Ejemplo: [0] 15 10 10 10 7 7 7 7 7 7 7 7 7 7 7 [1] 10 15 15 15 15 15 14 11 10 10 10 10 10 10 10 [2] 14 14 14 14 14 14 15 15 15 15 14 11 11 11 11 [3] 11 11 11 11 11 11 11 14 14 14 15 15 15 14 14 [4] 7 7 7 7 10 10 10 10 11 11 11 14 14 15 15 I 0 0 0 0 0 1 1 1 1 2 2 2 3 3 4 J 1 1 2 3 4 2 2 3 4 3 3 4 4 4 5 MIN 0 0 1 1 4 1 2 3 4 2 3 4 3 4 4 Tiempo de Ejecución: El ciclo externo se ejecuta n veces para una lista de n elementos. Cada búsqueda requiere comparar todos los elementos no clasificados. Luego la complejidad es O(n2). Este algoritmo presenta un comportamiento constante independiente del orden de los datos. Estabilidad: Puede que haya algo de discrepancia pero esta implementación parece ser estable, puede verificar esto ordenando un conjunto de datos que tenga un par de ellos con la misma clave, el orden relativo entre ellos es conservado, pero algunos autores dicen que no es estable. Ventajas: • Fácil implementación. • No requiere memoria adicional. • Realiza pocos intercambios. • Rendimiento constante: poca diferencia entre el peor y el mejor caso. Desventajas: • Lento. • Realiza numerosas comparaciones. 11
  • 12. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López ALGORITMO SHAKE Conocido como doble ordenamiento de burbuja; recorre el arreglo intercambiando los elementos adyacentes que estén desordenados. Se recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente lo que hace es tomar el elemento mayor y lo coloca en su posición y al mismo tiempo también coloca el elemento menor en su posición. PSEUDOCÓDIGO ALGORITMO SHAKE INICIO ENTERO I 0, ARREGLO[N] ENTERO K N - 1 ENTERO MIN, MAX, J, AUX MIENTRAS(I < K) { MIN I MAX I PARA(J I + 1, HASTA K, J J + 1) { SI(ARREGLO[J] < ARREGLO[MIN]) { MIN J } SI(ARREGLO[J] > ARREGLO[MAX]) { MAX J } } AUX ARREGLO[MIN] ARREGLO[MIN] ARREGLO[I] ARREGLO[I] AUX SI(MAX I) { AUX ARREGLO[MIN] ARREGLO[MIN] ARREGLO[K] ARREGLO[K] AUX } SI NO { AUX ARREGLO[MAX] ARREGLO[MAX] ARREGLO[K] ARREGLO[K] AUX } I I + 1; K K - 1; } } CÓDIGO EN C++ void shake(void) 12
  • 13. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López { int i = 0, ARREGLO[N]; int k = N - 1; int min, max, j, aux; while (i < k) { min = i; max = i; for(j = i + 1; j <= k; j++) { if (ARREGLO[j] < ARREGLO[min]) min = j; if (ARREGLO[j] > ARREGLO[max]) max = j; } aux = ARREGLO[min]; ARREGLO[min] = ARREGLO[i]; ARREGLO[i] = aux; if (max == i) { aux = ARREGLO[min]; ARREGLO[min] = ARREGLO[k]; ARREGLO[k] = aux; } else { aux = ARREGLO[max]; ARREGLO[max] = ARREGLO[k]; ARREGLO[k] = aux; } i++; k--; } } Ejemplo: [0] 15 7 7 [1] 10 10 10 [2] 14 14 11 [3] 11 11 14 [4] 7 15 15 I 0 1 2 K 4 3 2 J 1 2 3 4 2 3 4 3 13
  • 14. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López MIN 0 1 4 1 2 MAX 0 1 2 2 Tiempo de ejecución: n  n  El bucle interno se efectuará  + 1 ; el bucle interior se ejecutará  + 1 entonces por la 2  2  n  n  regla de la multiplicación tenemos  + 1 *  + 1 ⇒ O(n2) 2  2  Ventajas: • Relativamente fácil de implementar. • No requiere memoria adicional. Estabilidad: Es inestable no mantiene el orden relativo de los registros. Desventajas: • Realiza numerosas comparaciones. • Realiza numerosos intercambios. 14
  • 15. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López ALGORITMO SHELL Ordenamiento por intervalos decrecientes, nombrado así debido a su inventor Donald Shell, este algoritmo ordena subgrupos de elementos separados K unidades respecto de su posición en el arreglo. El valor K es llamado intervalo. Después de que los primeros K subgrupos fueron ordenados generalmente utilizando Inserción Directa, se escoge un nuevo valor de K más pequeño, y el arreglo es de nuevo partido entre el nuevo conjunto de subgrupos. Cada uno de los subgrupos mayores es ordenado y el proceso se repite de nuevo con un valor más pequeño de K. Cuando el incremento toma un valor de 1, todos los elementos pasan a formar parte del subgrupo y se aplica inserción directa. El método se basa en tomar como salto al principio N/2, siendo N el número de elementos, y luego se va reduciendo a la mitad en cada repetición hasta lograr un valor de 1. PSEUDOCÓDIGO ALGORITMO SHELL INICIO ENTERO INTERVALO, K, J, I, AUX INTERVALO N DIV 2 MIENTRAS(INTERVALO > 0) { PARA(I INTERVALO – 1, HASTA N, I I + 1) { J I - INTERVALO MIENTRAS(J >= 0) { K J + INTERVALO SI(VECTOR[K] <= VECTOR[J]) { AUX VECTOR[J] VECTOR[J] VECTOR[K] VECTOR[K] AUX } SI NO { J 0 } J J - INTERVALO } } INTERVALO INTERVALO DIV 2 } } 15
  • 16. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López CÓDIGO EN C++ void shell(void) { int intervalo, k, j, i, aux; intervalo = RANGO / 2; while(intervalo > 0) { for(i = intervalo - 1; i < RANGO; i++) { j = i - intervalo; while(j >= 0) { k = j + intervalo; if(vector[k] <= vector[j]) { aux = vector[j]; vector[j] = vector[k]; vector[k] = aux; } else j = 0; j = j - intervalo; ver_valores(vector); } } intervalo = intervalo / 2; } } Ejemplo: [0] 15 15 7 7 7 [1] 10 10 10 10 10 [2] 14 7 15 11 11 [3] 11 11 11 15 14 [4] 7 14 14 14 15 I 1 2 3 4 0 1 2 3 4 J -1 -2 0 -2 1 -2 2 0 -2 -1 0 -2 1 -2 2 1 -2 3 2 -2 K 1 2 3 4 2 0 1 2 3 2 4 3 INTERVALO 2 2 2 2 1 1 1 1 1 16
  • 17. Algoritmos y Estructura de Datos I Ing. Rolf Pinto López Tiempo de ejecución: n El bucle externo se ejecutará, el redondeo de   veces, el interno n veces, luego el bucle 2 n mas interno depende de j ⇒ j O(n) la constante j se absorbe, luego tenemos O   * o(n) ⇒ 2 O(n2) Ventajas: • No requiere memoria adicional. • Mejor rendimiento que el método de Inserción clásico Estabilidad: Es inestable no mantiene el orden relativo de los registros. Desventajas: • Implementación algo confusa. • Realiza numerosas comparaciones e intercambios. EJERCICIOS DE APLICACIÓN OBJETIVOS A. Aplicar los diferentes métodos de ordenamiento a un grupo de datos, este grupo de datos estará constituido por un array de n elementos. B. Analizar y criticar el desempeño de cada algoritmo respecto a sus semejantes teniendo en cuenta que todos son de carácter no recursivo. 1) Implemente el algoritmo de ordenación burbuja, mejore el rendimiento del algoritmo, centre su trabajo en el bucle interno. 2) Implemente el algoritmo de ordenación shake, ¿Qué mejoras le encuentra respecto al de burbuja? 3) Implemente el algoritmo de ordenación selección. 4) Implemente el algoritmo de ordenación inserción. 5) Implemente el algoritmo de ordenación shell. ¿Qué función cumplen los intervalos decrecientes de este algoritmo? 6) Implemente el algoritmo de orden Quick Sort ROLFPINTO@HOTMAIL.COM 17