Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy 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] 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] Pseudocódigo de Shell Sort en WinPseudo 1.3

#
# 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
Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com