Metodos De Ordenamiento

69,301 views
69,064 views

Published on

Published in: Travel, Business
8 Comments
30 Likes
Statistics
Notes
No Downloads
Views
Total views
69,301
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
8
Likes
30
Embeds 0
No embeds

No notes for slide

Metodos De Ordenamiento

  1. 1. Algoritmos de Ordenamiento <ul><li>METODOS ESTATICO </li></ul><ul><li>METODOS DINAMICOS </li></ul>
  2. 2. ESTRUCTURA DE DATOS RONALD BARRERA L. ROLANDO QUIJIJE
  3. 3. El método de sacudida es una optimización del método de intercambio directo o burbuja . En este algoritmo cada pasada tiene dos etapas. En la primera etapa &quot;de derecha a izquierda&quot; se trasladan los elementos más pequeños hacia la parte izquierda del arreglo, almacenando en una variable la posición del último elemento intercambiado. Ordenamiento ESTATICO I método de sacudida (Shaker sort)
  4. 4. En la segunda etapa &quot;de izquierda a derecha&quot; se trasladan los elementos más grandes hacia la parte derecha del arreglo,almacenando en otra variable la posición del último elemento intercambiado. El algoritmo termina cuando en una etapa no se producen intercambios o bien,cuando el contenido de la variable que almacena el extremo izquierdo del arreglo es mayor que el contenido de la variable que almacena el extremo derecho.
  5. 5. void sacudida (itemType a[], int N){     int i, j, izq, der, aux;     izq = 2; der = N; j = N;     do     {        for(i = der; i >= izq; i--)              if (a[i - 1] > a[i])             {  swap (a, i, i -1);                 j = i;             }        izq= j + 1;        for(i = izq; i <= der; i++)             if (a[i -1] > a[i])             { swap (a, i, i -1)                j = i;             }        der= j - 1;     } while (izq <= der); } de sacudida (Shaker sort)
  6. 6. Ordenamiento ESTATICO II Ordenamiento por el El método Shell es una versión mejorada del método de inserción directa . Este método también se conoce con el nombre de inserción con incrementos decrecientes. En el método de ordenación por inserción directa cada elemento se compara para su ubicación correcta en el arreglo, con los elementos que se encuentran en la parte izquierda del mismo. Si el elemento a insertares más pequeño que el grupo de elementos que se encuentran a su izquierda,es necesario efectuar entonces varias comparaciones antes de su ubicación. método Shell
  7. 7. Shell propone que las comparaciones entre elementos se efectúen con saltos de mayor tamaño pero con incrementos decrecientes, así, los elementos quedarán ordenados en el arreglo más rápidamente. void shellsort (itemType a[], int N) {     int i, j, h;     itemType v;     for (h = 1; h <= N/9; h = 3 * h + 1);     for (i = h +1; i <= N; i += 1)     {         v = a[i]; j = i;         while (j > h &&a[j- h] > v)            { a[j]= a[j - h]; j -= h;}          a[j] = v;      } }
  8. 8. ORDENAMIENTO DINAMICO II Quicksort <ul><li>Este método es una mejora sustancial del método de intercambio directo y recibe su nombre por la velocidad con la que ordena los elementos del arreglo. La idea básica es la siguiente: </li></ul><ul><ul><li>Se toma un elemento X de una posición cualquiera del arreglo. </li></ul></ul><ul><ul><li>Se trata de ubicar a X en la posición correcta del arreglo, de tal forma que todos los elementos que se encuentren a su izquierda sean menores o iguales a X y todos los elementos que se encuentren a su derecha sean mayores o iguales a X. </li></ul></ul>
  9. 9. <ul><ul><li>3.Se repiten los pasos anteriores pero ahora para los conjuntos de datos que se encuentran a la izquierda y a la derecha de la posición correcta de X en el arreglo. </li></ul></ul><ul><ul><li>4.El proceso termina cuando todos los elementos se encuentran en su posición correcta en el arreglo. </li></ul></ul>
  10. 10. void quicksort (itemType a[], int left, int right) {    int i; Stack<int> sf(50);    for (;;)    {        while (right > left)        {            i = partition (a, left, right);            if (i - left > right - i)            {    sf.push (left);sf.push (i - 1); left = i + 1; }            else            {    sf.push (i + 1); sf.push (right); right = i - 1; }        }        if (sf.empty ()) break;        right = sf.pop (); left = sf.pop ();    } }
  11. 11. El ordenamiento por fusión consiste en combinar dos estructuras de datos ordenadas para crear una estructura ordenada de mayor tamaño. En muchas aplicaciones de procesamiento de  información se almacena un archivo ordenado al que se le añaden nuevos elementos de manera regular. Normalmente se juntan cierta cantidad de entradas nuevas que posteriormente se agregan al archivo principal para proceder finalmente a reordenar todo el archivo. Este tipo de aplicaciones están especialmente hechas para fusión: Una estrategia mejor consiste en ordenar el conjunto de entradas nuevas y entonces fusionarlo con el archivo principal. Ordenamiento DINAMICO II por fusión (Mergesort)
  12. 12. Fusión Para comenzar, supongamos que contamos con dos arreglos de enteros ordenados a[1], ..., a[M] y b[1], ..., b[N] y deseamos fusionarlos en un tercer arreglo c[1], ..., c[M+N]. Entonces podemos utilizar el siguiente algoritmo: i = 1; j = 1; a[M+1] = itemMAX; b[N+1] = itemMAX; for (k = 1; k <= M + N; k++)    c[k] = (a[i] < b[j]) ? a[i++] : b[j++];
  13. 13. Fusión con listas encadenadas Sería deseable contar con un método que ordenara las listas en sitio, en vez de utilizar espacio extra proporcional a el tamaño del archivo fusionado. Realizar esto es factible pero resulta muy complicado lograrlo con una estructura de datos de arreglo por lo que optaremos por una lista encadenada que se adapta mejor a las exigencias de este algoritmo. struct node    {itemType key; struct node *next; }; struct node *z;
  14. 14. struct node *merge( struct node *a, struct node *b) {    struct node *c;    c = z;    do        if (a->key <= b->key)            {c->next = a; c = a; a = a->next; }        else            {c->next = b; c = b; b = b->next; }    while (c->key != z->key);    c = z->next; z ->next = z;    return c; } Se asume que las listas cuentan con un nodo cola centinela denominado z y que el elemento siguiente de este nodo apunta a sí mismo y el valor de su llave es igual a itemMAX;
  15. 15. Ordenamiento por fusión con listas struct node *mergesort( struct node *c) {    struct node *a, *b;    if (c->next != z)    {        a = c; b= c->next->next->next;        while (b != z)            {c = c->next; b = b->next->next;}        b = c->next; c->next = z;        return merge( mergesort (a), mergesort (b));    }    return c; }
  16. 16. F I N

×