Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Web Analytics
Cookie Policy Terms and Conditions Ordenación Shell Sort - Wikipedia, la enciclopedia libre

Ordenación Shell Sort

De Wikipedia, la enciclopedia libre

El Shell Sort es un algoritmo de ordenación de disminución incremental, nombrado así debido a su inventor Donald Shell. El rendimiento de este algoritmo depende del orden de la tabla inicial y va de n2 en el caso peor a n4 / 3 y se puede mejorar.

Tabla de contenidos

[editar] Descripción del algoritmo

El algoritmo ordena subgrupos de elementos separados k unidades (respecto de su posición en la tabla) en la tabla original. El valor k es llamado incremento. Después de que los primeros k subgrupos han sido ordenados (generalmente utilizando Ordenamiento por inserción), se escoge un nuevo valor de k más pequeño, y la tabla es de nuevo partida 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 hasta que en algún momento k llega a valer 1.

[editar] Código en Java

void shell_sort(int[] A, int n)     // ordena A[0], A[1], ... , A[n-1]
{
  int i, j, k, m=0, temp;
  int[] incrementos = { 1,4,10,23,57,143,311,666,1787,4711,11841,27901,
                  84833,213331,543749,1355339,3501671,8810089,21521774,
                  58548857,157840433,410151271,1131376761,2147483647 };

  while (incrementos[m] < n)  // busca el mayor incremento menor que n
         ++m;
  while (--m >= 0)
  {
    k = incrementos[m];

    for (i=k; i<n; i++)       // ordena k subgrupos con insertionsort
    {
      j = i;
      temp = A[i];
      while ((j >= k) && (A[j-k] > temp))
      {
        A[j] = A[j - k];
        j = j - k;
      }
      A[j] = temp;
    }
  }
}

[editar] Algoritmo Shell en C++

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define n 100


void shell_sort(int A[], int size)
{
  int i, j, incrmnt, temp;


  incrmnt = 3;
  while (incrmnt > 0)
  {
    for (i=0; i < size; i++)
    {
      j = i;
      temp = A[i];
      while ((j >= incrmnt) && (A[j-incrmnt] > temp))
      {
        A[j] = A[j - incrmnt];
        j = j - incrmnt;
      }
      A[j] = temp;
    }
    if (incrmnt/2 != 0)
      incrmnt = incrmnt/2;
    else if (incrmnt == 1)
      incrmnt = 0;
    else
      incrmnt = 1;
  }
//imprime arreglo
 for(i=0;i<n;i++)
        printf("%d ",A[i]);


}


main()
{
 int A[n],a,i;

  clrscr();
  randomize();

  for (i=0;i<n;i++)
        A[i]=random(5);

 shell_sort(A,n);
 getch();
 return 0;
}

[editar] Pseudocódigo en C del Shell Sort

 /* Ordenación por ShellSort
 tabla T: tabla a ordenar
 índice P = principio de la tabla
 índice U = final de la tabla
 tabla Inc = tabla con los incrementos de mayor a menor. Un ejemplo podría ser 4,3,2,1
 entero nInc = número de incrementos
 */
 ShellSort (tabla T, indice P, indice U)
 
 tabla Inc = [4,3,2,1]
 entero nInc = 4

 for (i=1; i<nInc; i++)
   for (j=0; j<Inc[i]; j++)
     InsertSortconIncrementos (T, P+j-1, Inc[i])

 /* Es el InsertSort pero con subtablas */
 InsertSortconIncrementos (tabla T, indice P, indice U, entero k)
     i = P + k;
     while (i <= U)
       A = T[i]
       j = i - k
       while (j >= P ) y (T[j] > A)
         T[j+k] = T[j]
         j = j - k
       T[j+k] = A
     i = i + k

[editar] Pseudocódigo de Shell Sort en Pascal

Procedimiento Shell Sort;

const MAXINC = _____;
incrementos = array[1..MAXINC] of integer;
var j,p,num,incre,k:integer;
begin
    for incre := 1 to MAXINC do begin
        k := inc[incre]; /* k recibe un tipo de incremento */
        for p := k+1 to MAXREG do begin /* inserción directa para el grupo que se encuentra 
                                           cada k posiciones */
            num := reg[p];
            j := p-k;
            while (j>0) AND (num < reg[j]) begin
                reg[j+k] := reg[j];
                j := j - k;
            end;
            reg[j+k] := num;
        end
    end
end;



[editar] Implementación en WinPseudo 1.4

#
# Shell Sort. Herbert Schildt, "Advanced C", Pag. 13.
#

INICIO Programa 18 - Shell Sort. Herbert Schildt, "Advanced C", Pag. 13.
   VAR
      VECTOR   Vect[150]
      VECTOR   A[5]
      NUMERICO i
      NUMERICO j
      NUMERICO k
      NUMERICO s
      NUMERICO w
      NUMERICO Aux
      NUMERICO Cant
   FIN-VAR

   Cant = 150

   i = 0
   MIENTRAS (i < Cant)
      Vect[i] = Cant - i
      i = i + 1
   FIN-MIENTRAS

   A[0] = 9
   A[1] = 5
   A[2] = 3
   A[3] = 2
   A[4] = 1

   w = 0
   MIENTRAS (w < 5)
      k = A[w]
      s = 0 - k
      i = k
      MIENTRAS (i < Cant)
         Aux = Vect[i]
         j = i - k
         SI (s = 0)
            s = 0 - k
            s = s + 1
            Vect[s] = Aux
         FIN-SI
         MIENTRAS ((Aux < Vect[j]) & (j >= 0) & (j <= Cant))
            Vect[j+k] = Vect[j]
            j = j - k
         FIN-MIENTRAS
         Vect[j+k] = Aux
         i = i + 1
      FIN-MIENTRAS
      w = w + 1
   FIN-MIENTRAS


   i = 0
   MIENTRAS (i < Cant)
      imprimir entero (Vect[i])
      imprimir ", "
      i = i + 1
   FIN-MIENTRAS


FINAL

[editar] Ejemplo

Para el arreglo a = [6, 1, 5, 2, 3, 4, 0] Tenemos el siguiente recorrido:

Recorrido  Salto    Lista Ordenada  Intercambio
1          3        2,1,4,0,3,5,6   (6,2), (5,4), (6,0)
2          3        0,1,4,2,3,5,6   (2,0)
3          3        0,1,4,2,3,5,6   Ninguno
4          1        0,1,2,3,4,5,6   (4,2), (4,3)
5          1        0,1,2,3,4,5,6   Ninguno
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu