Vous êtes sur la page 1sur 34

FECHA

INSTITUTOPOLITCNICONACIONAL

SECRETARIAACADMICA DIA MES AO
DIRECCINDEEDUCACINSUPERIOR
ESIMECULHUACAN INGENIERAENCOMPUTACIN
NOMBREALUMNO: ASIGNATURA
Apellidopaterno
ESTRUCTURASDEDATOS
ApellidomaternoNombre(s)
PROFESOR
No.BOLETA GRUPO M.enC.BEATRIZEUGENIACORONA

RAMREZ

PRCTICANo.11
ORDENACININTERNA
1. Objetivo

Elalumnoconocereidentificarlosdiferentestiposdeordenaciones,enestecasolos
algoritmosdeordenacininterna

2. MaterialyEquipo

Computadora,CompiladorCy/oJavayunidaddealmacenamiento(USB)

3. IntroduccinTerica

Ordenarsignificareagruparoreorganizarunconjuntodedatosuobjetosenuna
secuenciaespecfica.Losobjetosordenadosaparecenpordoquier.Directorios
telefnicos,registrosdepacientesenunhopital,registrosdehuspedesdeun
hotel,sontansloalgunosejemplosdeobjetosordenadosconlosqueelser
humanoseencuentrafrecuentemente.
Ordenarsignificapermutarloselementosdetalformaquequedendeacuerdo
conunadistribucinestablecida.
Ascendente
Descendente

Enelprocesamientodedatosalosprocesosdeordenacinselesclasificaen
dosgrandescategoras:

Ordenacindearreglos/listas
Ordenacindearchivos

Laprimeracategorasedenominatambinordenacininterna,yaquelos
elementosocomponentesdelarregloseencuentranenlamemoriaprincipalde
lacomputadora.Lasegundacategorasellamaordenacinexterna,yaquelos
elementosseencuentranenarchivosalmacenadosendispositivosde
almacenamientosecundario.

113

Una de las tareas ms frecuentes en el procesamiento de datos es la


ordenacin,queconsisteenlareorganizacindeunconjuntodadodeobjetos
en una secuencia especificada, con respecto a aluno de los campos de los
elementosdelconjunto.Elobjetivofundamentaldelaordenacinesfacilitarla
bsqueda de los elementos del conjunto ordenado. Es una actividad
fundamentalqueserealizauniversalmente.Loselementosordenadosaparecen
en las guas telefnicas, en las enciclopedias y diccionarios, en las fichas
acadmicas,etc.Aparecenalldondehayaobjetosquenecesitenserbuscadosy
recuperados. Una vez que una secuencia de datos est ordenada se puede
buscardeformamuyrpidacualquierobjetoindividual.

Semostrarncincomtodosdeordenacin,aunqueexistenmuchosms.Solo
sepretendemostrarlosmtodosmsrepresentativos.

Los mtodos de ordenacin son un mtodo excelente de cmo una tarea
puede resolverse mediante algoritmos muy diferentes, cada uno de ellos con
ventajaseinconvenientes.Cadaalgoritmodebervalorarsefrentealrestopara
decidirculserconvenienteusarencadacasoconcreto.

Los mtodos se dividen en dos categoras, segn la estructura de datos
utilizada:

Mtodosdeordenacininterna:
Consisten en la ordenacin de arreglos, que se almacenan en memoria
interna,ysondeaccesoaleatorio:cadaelementoesvisibleyaccesible
individualmente

Mtodosdeordenacinexterna:
Consiste en la ordenacin de ficheros secuenciales. Los ficheros se
colocanenalmacenamientosexternos,ysonmslentos.Suaccesoser
secuencial,esdecir,paraaccederaunelementonecesitaremosacceder
atodoslosanteriores.

Los mtodos de ordenacin interna se pueden clasificar en funcin de su
eficienciaentrminosdeltiempoutilizadoenlaordenacin.Generalmente,nos
fijaremos en el nmero de comparaciones en el de movimientos a realiza en
funcin del nmero de elementos a ordenar. Pueden considerarse dos grupos
dealgoritmosdeordenacininterna.

MtodosDirectos
Son mtodos sencillos, pero poco eficientes, su complejidad es O(n2),
siendonelnmerodeelementosaordenar.Estosalgoritmossoncortos
y fciles de entender, y para arreglos pequeos son suficientemente
rpidos. Sin embargo, no deben utilizarse con arreglos grandes puesto

114

que el tiempo de ordenacin crece demasiado. Dentro de este grupo


tenemos:
Ordenacinporintercambiodirecto(burbuja)
Ordenacinporinsercin
Ordenacinporseleccindirecta

Mtodosavanzados
Sonalgoritmosmuchomseficientes,eficienciaO(nlogn),aunqueson
ms sofisticados y difciles de entender. Su uso es necesario cuando se
tratadearreglosgrandes.Aesterubropertenecen:
Mtodorpido(quicksort)
Mtododelmontculo(heapsort)

115

Mtodosdirectos

Mtododeintercambiodirecto(burbujaoBubbleSort)

Elmtododeintercambiodirecto,conocidocoloquialmentecomoburbuja,esel
ms utilizado entre estudiantes principiantes de computacin por su fcil
comprensinyprogramacin.Peroesprecisosealarqueesquizselmtodo
msineficiente.

Elmtododeintercambiodirectopuedetrabajardedosmanerasdiferentes:en
forma ascendente o en forma descendente. La idea bsica de este algoritmo
consisteencompararparesdeelementosadyacenteseintercambiarlosentres
hasta que todos se encuentren ordenados. Se realizan (n1) pasadas
transportando en cadauna de ellas elmenoromayor de los elementos segn
sea el caso a su posicin ideal. Al final de las (n1) pasadas los elementos del
arregloestarnordenados.

Supongaquesedeseaordenarlossiguientesdatosalmacenadosenunarreglo:

15 67 8 16 44 27 12 35

Lascomparacionesqueserealizanson:

PRIMERAPASADA

A[7]>A[8](12>35) Nohayintercambio

A[6]>A[7](27>12) Shayintercambio

A[5]>A[6](44>12) Shayintercambio

A[4]>A[5](16>12) Shayintercambio

A[3]>A[4](8>12) Nohayintercambio

A[2]>A[3](67>8) Shayintercambio

A[1]>A[2](15>8) Shayintercambio

116

Luegodelaprimerapasadaelarregloquedaas:


8 15 67 12 16 44 27 35

Se observa que el elemento ms pequeo, en este caso 8, fue situado en la


parteizquierdadelarreglo.

SEGUNDAPASADA

A[7]>A[8](27>35) Nohayintercambio

A[6]>A[7](44>27) Shayintercambio

A[5]>A[6](16>27) Nohayintercambio

A[4]>A[5](12>16|) Nohayintercambio

A[3]>A[4](67>12) Shayintercambio

A[2]>A[3](15>12) Shayintercambio

A[1]>A[2](15>8) Nohayintercambio

Luegodelasegundapasadaelarregloquedaas:


8 12 15 67 16 27 44 35

Yelsegundoelementomspequeodelarreglo,enestecaso12fuesituadoen
lasegundaposicin.

3a.Pasada 8 12 15 16 67 27 35 44

4a.Pasada 8 12 15 16 27 67 35 44

5a.Pasada 8 12 15 16 27 35 67 44

6a.Pasada 8 12 15 16 27 35 44 67

7a.Pasada 8 12 15 16 27 35 44 67

117

La caracterstica principal de este mtodo es el intercambio de pares de


elementos adyacentes. Consiste bsicamente en hacer varias pasadas sobre el
arreglo comparando en cada una de ellas todos los elementos adyacentes de
formaquesinoestnordenadosseintercambian.Enelpeorcasoesnecesario
hacern1pasadassobreelarregloparagarantizarquequedaordenado,encada
pasadaarrastraelelementodemsvalorhastaelextremoderecho.

Mtododeinsercindirecta

Estemtodoconsisteeninsertarcadaelemento,comenzandoporelsegundoy
hastaelfinal,enlugarquelecorrespondeenlasecuenciaquesevaformandoa
suizquierda.

En la primera pasada se selecciona el segundo elemento y se inserta en la


secuenciaordenadaformadaporelprimerelemento.Enlasegundapasada,se
inserta el tercer elemento en la secuencia ordenada formada por los dos
primeros, y as sucesivamente hasta llegar al final del arreglo. Por tanto, el
mtodoconsisteenn1insercionesenunalistaordenada.

Elmtododeordenacinporinsercin directaeselqueutilizangeneralmente
losjugadoresdecartascuandolasordenan,deahquetambinseconozcacon
elnombredemtododelabaraja.

Laideacentraldeestealgoritmoconsisteeninsertarunelementodelarregloen
suparteizquierda,queyaseencuentraordenada.Esteprocesoserepitedesde
el segundo hasta el nsimo elemento. Observemos un ejemplo. Ordenar las
siguientesclaves:

15 67 8 16 44 27 12 35

Lascomparacionesqueserealizanson:

PRIMERAPASADA

A[2]<A[1](67<15) Nohayintercambio

15 67 8 16 44 27 12 35

118

SEGUNDAPASADA

A[3]<A[2](8<67) Shayintercambio

A[2]<A[1](8<15) Shayintercambio

8 15 67 16 44 27 12 35

TERCERAPASADA

A[4]<A[3](16<67) Shayintercambio

A[3]<A[2](16<15) Nohayintercambio

8 15 16 67 44 27 12 35

Observe que una vez que se determina la posicin correcta del elemento se
interrumpenlascomparaciones.

4a.Pasada 8 15 16 16 44 27 12 35
5a.Pasada 8 15 16 16 27 67 12 35

6a.Pasada 8 12 15 16 16 44 67 35

7a.Pasada 8 12 15 16 16 35 44 67

Ordenacinporintercambiodirectoconseal

Estemtodoesunamodificacindelmtododeintercambiodirectoanalizado
anteriormente.Laideacentraldeestealgoritmoconsisteenutilizarunamarcao
sealparaindicarquenosehaproducidoningnintercambioenunapasada.Es
decirsecompruebaqueelarregloesttotalmenteordenadodespusdecada
pasada,terminandosuejecucinencasoafirmativo.

119

Ordenacinporelmtododelasacudida

ELmtododeshakersort,msconocidocomoelmtododelasacudida,esuna
optimizacin del mtodo por intercambio directo. La idea bsica de este
algoritmo consiste en mezclar las dos formas en que se puede realizar el
mtododelaburbuja.

Esestealgoritmocadapasadatienedosetapas.Enlaprimeraetapadederecha
a izquierda, se trasladan los elementos ms pequeos hacia la parte izquierda
del arreglo, almacenando en una variable la posicin del ltimo elemento
intercambiado. En la segunda etapa, de izquierda a derecha, se trasladan los
elementosmsgrandeshacialapartederechadelarreglo,almacenandoenotra
variable la posicin del ltimo elemento intercambiado. Las sucesivas pasadas
trabajan con los componentes del arreglo comprendidos entre las posiciones
almacenadas en las variables auxiliares. El algoritmo termina cuando en una
etapa no se producen intercambios, o bien cuando el contenido de la variable
que guarda el extrema izquierdo del arreglo es mayor que el contenido de la
variablequealmacenaelextremoderecho.

SedeseanordenarlassiguientesclavesdeunarregloA:

15 67 8 16 44 27 12 35

PRIMERAPASADA

Primeraetapa(dederechaaizquierda)

A[7]>A[8](12>35) Nohayintercambio

A[6]>A[7](27>12) Shayintercambio

A[5]>A[6](44>12) Shayintercambio

A[4]>A[5](16>12) Shayintercambio

A[3]>A[4](8>12) Nohayintercambio

A[2]>A[3](67>8) Shayintercambio

A[1]>A[2](15>8) Shayintercambio

120

ltimaposicindeintercambiodederechaaizquierda:2

Luegodelaprimeraetapadelaprimerapasada,elarregloquedaas:


8 15 67 12 16 44 27 35

Segundaetapa(deizquierdaaderecha)

A[2]>A[3](15>67) Nohayintercambio

A[3]>A[4](67>12) Shayintercambio

A[4]>A[5](67>16) Shayintercambio

A[5]>A[6](67>44)Shayintercambio

A[6]>A[7](67>27) Shayintercambio

A[7]>A[8](67>35) Shayintercambio

ltimaposicindeintercambiodeizquierdaaderecha:8

Luegodelasegundaetapadelaprimerapasada,elarregloquedaas:

8 15 12 16 44 27 35 67

SEGUNDAPASADA

Primeraetapa(dederechaaizquierda)

A[6]>A[7](27>35) Nohayintercambio

A[5]>A[6](44>27) Shayintercambio

A[4]>A[5](16>27) Nohayintercambio

A[3]>A[4](12>16) Nohayintercambio

A[2]>A[3](15>12) Shayintercambio

121

ltimaposicindeintercambiodederechaaizquierda:3

8 12 15 16 27 44 35 67

Segundaetapa(deizquierdaaderecha)

A[3]>A[4](15>16) Nohayintercambio

A[4]>A[5](16>27) Nohayintercambio

A[5]>A[6](27>44) Nohayintercambio

A[6]>A[7](44>35) Shayintercambio

ltimaposicindeintercambiodeizquierdaaderecha:7

8 12 15 16 27 35 44 67

Alrealizarlaprimeraetapadelatercerapasadaseobservaquenoserealizaron
intercambios;porlotanto,laejecucindelalgoritmosetermina.

Ordenacinporinsercindirecta

Elmtododeordenacinporinsercin directaeselqueutilizangeneralmente
losjugadoresdecartascuandolasordenan,deahquetambinseconozcacon
elnombredemtododelabaraja.

Laideacentraldeestealgoritmoconsisteeninsertarunelementodelarregloen
suparteizquierda,queyaseencuentraordenada.Esteprocesoserepitedesde
el segundo hasta el nsimo elemento. Observemos un ejemplo. Ordenar las
siguientesclaves:

15 67 8 16 44 27 12 35

122

Lascomparacionesqueserealizanson:

PRIMERAPASADA

A[2]<A[1](67<15) Nohayintercambio

15 67 8 16 44 27 12 35

SEGUNDAPASADA

A[3]<A[2](8<67) Shayintercambio

A[2]<A[1](8<15) Shayintercambio

8 15 67 16 44 27 12 35

TERCERAPASADA

A[4]<A[3](16<67) Shayintercambio

A[3]<A[2](16<15) Nohayintercambio

8 15 16 67 44 27 12 35

Observe que una vez que se determina la posicin correcta del elemento se
interrumpenlascomparaciones.

4a.Pasada 8 15 16 16 44 27 12 35
5a.Pasada 8 15 16 16 27 67 12 35

6a.Pasada 8 12 15 16 16 44 67 35

7a.Pasada 8 12 15 16 16 35 44 67

123

Ordenacinporelmtododeinsercinbinaria

El mtodo de ordenacin por insercin binaria es una mejora del mtodo de


insercin directa. La mejora consiste en realizar una bsqueda binariaen lugar
deunabsquedasecuencial,parainsertarunelementoenlaparteizquierdadel
arreglo,queyaseencuentraordenado.Elproceso,aligualqueenelmtodode
insercindirecta,serepitedesdeelsegundohastaelnsimoelemento.

Ordenarlassiguientesclaves:

15 67 8 16 44 27 12 35

Acontinuacinsepresentanlascomparacionesquesellevanacabo:

PRIMERAPASADA

A[2]<A[1](67<15) Nohayintercambio

15 67 8 16 44 27 12 35

SEGUNDAPASADA

A[3]<A[1](8<157) Shayintercambio

8 15 67 16 44 27 12 35

TERCERAPASADA

A[4]<A[2](16<15) Nohayintercambio

A[4]<A[3](16<67) Shayintercambio

8 15 16 67 44 27 12 35

CUARTAPASADA

A[5]<A[2](44<15) Nohayintercambio

A[5]<A[3](44<16) Nohayintercambio
124

A[5]<A[4](44<67)Shayintercambio

8 15 16 44 67 27 12 35

QUINTAPASADA

A[6]<A[3](27<16) Nohayintercambio

A[6]<A[4](27<44)Shayintercambio

8 15 16 27 44 67 12 35

SEXTAPASADA

A[7]<A[3](12<16) Shayintercambio

A[7]<A[1](12<8) Nohayintercambio

A[7]<A[2](12<27) Shayintercambio

8 12 15 16 27 44 67 35

SPTIMAPASADA

A[8]<A[4](35<16) Nohayintercambio

A[8]<A[6](35<44)Shayintercambio

A[8]<A[5](35<27) Nohayintercambio

8 12 15 16 27 35 44 67

Mtododeseleccindirecta

Estemtodosebasaenelsiguienteprincipio:seseleccionadelalistacompleta
el elemento con menor valor y se intercambia con el primero, con lo que el
primer elemento queda definitivamente ordenado. A continuacin, se busca el
elemento de menor valor de la sub lista comprendida entre el segundo y el
ltimoyseintercambiaconelsegundoelemento,yassucesivamentehastaque
125

solo quede un elemento, que quedar definitivamente ordenado en el ltimo


lugar.

Elmtododeordenacinporseleccindirectaesmseficientequelosmtodos
analizadosanteriormente.Peroaunquesucomportamientoesmejorqueelde
aqullosysuprogramacinesfcilycomprensible,noserecomiendautilizarlos
cuandoelnmerodeelementosdelarregloesmedianoogrande.Laideabsica
deestealgoritmoconsisteenbuscarelmenorelementodelarregloycolocarlo
enla primera posicin.Luegosebuscaelsegundoelementomspequeo del
arregloysecolocaenlasegundaposicin.Elprocesocontinuahastaquetodos
los elementos del arreglo hayan sido ordenados. El mtodo se basa en los
siguientesprincipios:

1. Seleccionarelmenorelementodelarreglo.

2. Intercambiardichoelementoconelprimero.

3. Repetir los pasos anteriores con los (n1), (n2) elementos, y as


sucesivamentehastaquesloquedeelelementomayor.

Supongaquesedeseanordenarlassiguientesclaves:

15 67 8 16 44 27 12 35

Lascomparacionesqueserealizanson:

PRIMERAPASADA

Serealizalaasignacin:MENOR=A[1]=15

(MENOR<A[2])(15<67) Ssecumplelacondicin

(MENOR<A[3])(15<8) NosecumplelacondicinMENOR=[3]=8

(MENOR<A[4])(8<16) Ssecumplelacondicin

(MENOR<A[5])(8<44) Ssecumplelacondicin

(MENOR<A[6])(8<27) Ssecumplelacondicin

(MENOR<A[7])(8<12) Ssecumplelacondicin

(MENOR<A[8])(8<35) Ssecumplelacondicin

126

Luegodelaprimerapasada,elarregloquedadelasiguienteforma:

8 67 15 16 44 27 12 35

Observe que el menor elemento del arreglo A[3] = 8 se intercambio con el


primerelementoA[1]=15,realizandosolamenteunmovimiento.

SEGUNDAPASADA

Serealizalasiguienteasignacin:MENOR=A[2]=67

(MENOR<A[3])(67<15) NosecumplelacondicinMENOR=A[3]=15

(MENOR<A[4])(15<16) Ssecumplelacondicin

(MENOR<A[5])(15<44) Ssecumplelacondicin

(MENOR<A[6])(15<27) Ssecumplelacondicin

(MENOR<A[7])(15<12) NosecumplelacondicinMENOR=A[7]=12

(MENOR<A[8])(12<35) Ssecumplelacondicin

8 12 15 16 44 27 37 35

Observe que el segundo elemento ms pequeo del arreglo A[7] = 12 se


intercambioconelsegundoelemento,A[2]=67.

Acontinuacinsemuestranlosresultadosdelaspasadasrestantes.

3a.Pasada 8 12 15 16 44 27 67 35

4a.Pasada 8 12 15 16 44 27 7 35

5a.Pasada 8 12 15 16 27 44 67 35

6a.Pasada 8 12 15 16 27 35 67 44

7a.Pasada 8 12 15 16 27 35 44 67

127

OrdenacinporelmtododeShell

El mtodo de Shell es un aversin mejorada del mtodo de insercin directa.


Recibe ese nombre en honor de su autor, Donald L. Shell quien lo propuso en
1959. Este mtodo tambin se conoce como insercin con incrementos
decrecientes.

En el mtodo de ordenacin por insercin directa cada elemento se compara


parasuubicacincorrectaenelarregloconloselementosqueseencuentranen
su parte izquierda. Si el elemento a insertar es ms pequeo que el grupo de
elementos que se encuentran a su izquierda, ser necesario efectuar varias
comparacionesantesdesuubicacin.

Shellproponequelascomparacionesentreelementosseefectenconsaltosde
mayortamao,peroconincrementosdecrecientes,asloselementosquedarn
ordenadosenelarreglomsrpidamente.

Consideremos unarreglo quetenga 16 elementos. En primer lugar se dividirn


loselementosdearregloenochogrupos,teniendoencuantaloselementosque
se encuentran a ocho posiciones de distancia entre s y se ordenarn por
separado.

Quedarn en el primer grupo los elementos (A[1], A[9]); e el segundo


(A[2],A[10]), en el tercero, (A[3],A[11]), y as sucesivamente. Despus de este
primerpasosedividirnloselementosdelarregloencuatrogrupos,teniendoen
cuantaahoraloselementosqueseencuentrenacuatroposicionesdedistancia
entre s y se les ordenar por separado. Quedarn en el primer grupo los
elementos (A[1],A[5],A[9],A[13]); en el segundo (A[2],A[6],A[10],A[14]), y as
sucesivamente. En el tercer paso se dividirn los elementos del arreglo en
grupos,tomandoencuentaloselementosdelarregloqueseencuentranados
posicionesdedistanciaentresynuevamenteselesordenarporseparado.En
el primer grupo quedarn (A[1],A[3],A[5],A[7],A[9],A[11],A[13],A[15]); y en el
segundo (A[2],A[4],A[6],A[8],A[10],A[12],A[14],A[16]). Finalmente se agruparan
yordenarnloselementosdemaneranormal;esdecirdeunoenuno.

5 7 8 6 4 27 12 35 56 21 13 28 60 36 7 10

128

PRIMERAPASADA

Sedividenloselementosen8grupos:

Laordenacinproduce:

15 21 8 16 44 27 7 0 56 67 13 28 60 36 12 35

SEGUNDAPASADA

Sedividenloselementosen4grupos:

Laordenacinproduce:

5 21 7 10 44 27 8 16 56 36 12 28 60 67 13 35

TERCERAPASADA

Sedividenloselementosen2grupos:

129

Laordenacinproduce:

7 10 8 16 12 21 13 27 15 28 44 35 56 36 60 67

CUARTAPASADA

Sedividenloselementosenunsologrupo:

MtodosAvanzados

Losmtododirectossonsencillosperosonpocoseficientes,sucomplejidades
O(n2). Son tiles para ordenar arreglos pequeos pero cuando se trata de
arreglos con gran nmero de elementos resultan excesivamente lentos a
efectos prcticos. Por este motivo son necesarios otros algoritmos ms
sofisticadosymuyeficientes.

Estos algoritmos mejoran drsticamente la eficiencia de los mtodos directos,


sondeorden(nlogn),loquequieredecirqueprcticamentesonlinealespara
valoresgrandesden.

MtododeOrdenacinRpida(QuickSort)

La mejora de este algoritmo es tan efectiva, que es el mtodo ms conocido


para ordenar arreglos. Este algoritmo es fcil de implementar, y es el ms
eficiente detodoslosmtodosconocidos.En lamayoradelassituacionessu
eficienciaesO(nlogn),aunqueendeterminadoscosas,puedeconvertirseenun
algoritmolento,siendosueficienciaO(n2),estoscasossonmuyimprobables.

El mtodo de ordenacin quicksort es actualmente el mtodo de ordenacin


mseficientedelosmtodosdeordenacininterna.Estambinconocidocomo
mtodo rpido y de ordenacin por particin. Este mtodo es una mejora
sustancialdelmtododeintercambiodirectoysedenominaquicksort.Laidea
centraldelalgoritmoeslasiguiente:

130

1. SetomaunelementoXdeunaposicincualquieradelarreglo.

2. SetratadeubicaraXenla posicin correctadel arreglo,detal forma


que todos los elementos que se encuentren a su izquierda sean
menores o iguales a X y todos los elementos que se encuentran a su
derechaseanmayoresoigualesaX.

3. Serepitenlospasosanteriores,peroahoraparalosconjuntosdedatos
que se encuentran a la izquierda y a la derecha de la posicin X en el
arreglo.

4. El proceso termina cuando todos los elementos se encuentran en su


posicincorrecta.

Se debe seleccionar, entonces, un elemento X cualquiera. En este caso se


seleccionar A[1]. Se empieza a recorrer el arreglo de derecha a izquierda
comparando si los elementos son mayores o iguales a X. Si un elemento no
cumple con esta condicin, se intercambian aquellos y se almacena en una
variable la posicin del elemento intercambiado. Se inicia nuevamente el
recorridoperoahoradeizquierdaaderecha,comparandosiloselementosson
menoresoigualesaX.

Si un elemento no cumple con esta condicin, entonces se intercambian


aquellosysealmacenaenotravariablelaposicindelelementointercambiado.

Analicemoselsiguienteejemplo:

15 67 8 16 44 27 12 35

SeseleccionaA[1],porlotantoX=15.

Sellevanacabolascomparacionesquesemuestranacontinuacin:

PRIMERAPASADA

Recorridodederechaaizquierda

A[8]>=X(35>=15) Nohayintercambio

A[7]>=X(12>=15) Shayintercambio

12 67 8 16 44 27 15 35

131

Recorridodeizquierdaaderecha

A[2]<=X(67>=15) Shayintercambio

12 15 8 16 44 27 67 35

SEGUNDAPASADA

Recorridodederechaaizquierda

A[6]>=X(27>=15) Nohayintercambio

A[5]>=X(44>=15)Nohayintercambio

A[4]>=X(16>=15) Nohayintercambio

A[3]>=X(8>=15) Shayintercambio

12 8 15 16 44 27 67 35

Comoelrecorridodeizquierdaaderechasedeberainiciarenlamismaposicin
dondeseencuentraelelementoX,elprocesoterminayaquesedetectaqueel
elemento X se encuentra en la posicin correcta. Observe que los elementos
que forman parte del primer conjunto son menores o iguales a X, y los del
segundoconjuntosonmayoresoigualesaX.

12 8 15 16 44 27 67 35

Primerconjunto:128

Segundoconjunto:1644276735

Esteprocesodeparticionamientoaplicadoparalocalizarlaposicincorrectade
unelementoXenelarregloserepitecadavezquequedenconjuntosformados
pordosomselementos.

132

MtododelMontculo(HeapSort)

Estemtodoesunavariantedelmtododeordenacinporseleccin,dondela
bsqueda del elemento mnimo de un arreglo se realiza mediante tcnicas
basadasenlaconstruccindeunmontculooheap.

Relacinentreunmontculoyarreglo

Cualquier arreglo puede representarse en forma de rbol, por ejemplo un


arreglo cuyos elementos ocupan las posiciones 0 a N podemos representarlo
como un rbol vinario, donde se cumple que para un modo que ocupa la
posicinidelarreglo,suhijoizquierdoocupalaposicin2*i+1,ysuhijoderecho
laposicin2*i+2

V[0]
2

V[1]
V[2]
4 1

V[3] V[4]
V[6]
6 V[5]
15 0 90

V[7]

12
RBOLBINARIOCORRESPONDIENTEALARREGLOV

Posicin 0 1 2 3 4 5 6 7
V 2 4 1 15 6 0 90 12

REPRESENTACINDEUNARREGLOCOMORBOLBINARIO

133

Unmontculoesunrbolbinarioquecumpleciertascondiciones,consideremos
dostiposdemontculos:

Montculoascendente(miniheap)

Cadanodoesmenoroigualquesushijos
La raz del rbol contiene el menor elemento del heap y que, adems
cualquiercaminodelarazaunahoja,esunalistaordenadaascendente.

Montculodescendente(maxheap)

Cadanodoesmayoroigualquesushijos
La raz del rbol contiene el mayor elemento del heap y que, adems
cualquier camino de la raz a una hoja, es una lista ordenada
descendente.

Elmtododeordenacinheapsortseconocetambincomomontculo.Su
nombresedebeasuautor,J.W.Williams,quinlollamas.Eselmseficiente
delosmtodosdeordenacinquetrabajanconrboles.Laideacentraldel
algoritmosebasaendosoperaciones:

1. Construirunmontculo.

2. Eliminarlarazdelmontculoenformarepetida.

Esimportantesealarqueunmontculosedefinecomo:Paratodonododel
rbolsedebecumplirquesuvalorseamayoroigualqueelvalordecualquiera
desushijos.

Enlasiguientefigurasemuestraunmontculo.Allsepuedeobservarquepara
cadanodoKdelrbol,suvaloresmayoroigualqueelvalordecualquierade
sushijos.

134

Ahorabien,pararepresentarunmontculoenunarreglolinealsedebeteneren
cuentaparatodonodoKlosiguiente:

1. ElnodoKsealmacenaenlaposicinKcorrespondientedelarreglo.

2. ElhijoizquierdodelnodoKsealmacenaenlaposicin2*K.

3. ElhijoderechodelnodoKsealmacenaenlaposicin2*K+1.

Acontinuacinsepresentalafiguraconlarepresentacindelmontculoenun
arreglo.

67 36 60 28 21 56 44 27 16 15 08 35

AsuvezesposiblecalcularelpadredeunnodonorazKcualquiera,tomandola
parteenterade(Kentre2).Porejemplosisedeseasaberquineselpadredel
nodoA[11]=8,serealizalaoperacin11/2=5cuyocontenidoesA[5]=21.

Insercindeunelementoenunmontculo

Lainsercindeunelementoenunmontculosellevaacabopormediodelos
siguientespasos:

1. Seinsertaelelementoenlaprimeraposicindisponible.

2. Severificasisuvaloresmayorqueeldesupadre.Sicumpleesta
condicin,entoncesseefectaelintercambio.Sinocumpleesta
condicin,entonceselalgoritmosedetieneyelelementoqueda
ubicadoensuposicincorrectaenelmontculo.

135

Elpaso2seaplicademanerarecursivadesdeabajohaciaarriba.


Supongaquedeseaincorporaralmontculodelafiguradeabajoelelemento63.
Lascomparacionesqueserealizansonlassiguientes:

63>56 Shayintercambio

63>60 Shayintercambio

63>67 Nohayintercambio

Luegodehacerinsertadoelelemento63,elmontculoqueda:

Medicinexperimentaldelaeficiencia

Semuestraunatablaconlostiemposquehantardadoenordenarselosarreglos
deenterosdediferentestamaosutilizandotodoslosmtodosdeordenacin
explicados.Losarreglossehangeneradoaleatoriamente.Enlascolumnasfigura
el nmero de elementos del arreglo a ordenar y en las filas los diferentes

136

mtodos.Lostiempossedanenmilisegundos.Observequeladiferenciaentre
eltiemporequeridoporelalgoritmodelaburbujayelrequeridoporQuickSort
paraordenarelarreglode40,000enteros:unos12minutosfrenteaalgomenos
de1segundo.Tambinesinteresanteobservarqueparaordenarunarreglode
10,000 elementos la burbuja es 552 veces ms lenta que QuickSort, mientras
queparaordenarelarreglode40,000elementos,laburbujaes1,939vecesms
lenta.


10,000 15,000 20,000 25,000 30,000 35,000
Burbuja 41.924 116.538 170.098 266.772 391.321 534.290
Insercin 13.311 31.966 55.043 86.794 127.112 197.123
Seleccin 16.962 39.192 69.083 108.254 157.849 226.166
QuickSort 76 123 163 212 267 449
HeapSort 176 290 389 493 692 720

MedicinExperimental


4. Desarrollo

Escribaelcdigofuentequerealicelosmtodosdeordenacininternaen
formadeMENU.

1. Ordenacinporintercambiodirecto.
2. Ordenacinporelmtododeintercambiodirectoconseal.
3. Mtododelasacudida(Shakersort).
4. Ordenacinporinsercindirecta.
5. Insercinbinaria.
6. Ordenacinporseleccindirecta.
7. MtododeShell
8. Ordenacinrpida(Quicksort).
9. Ordenacinporelmtododelmontculo.










#include<iostream.h>

137

#include<stdlib.h>
#include<conio.h>
voidburbuja(int[]);voidburbuja2(int[]);voidshakersort(int[]);voididirecta(int
[]);
voidibinaria(int[]);voidsdirecta(int[]);voidshell(int[]);voidquicksort(int
[],int);
voidreduce_recursivo(int,int,int[]);voidmonticulo(int[],int);void
inserta_monticulo(int[],int);
voidelimina_monticulo(int[],int);voidllenar(int[]);voidimprimir(int[]);
main()
{
clrscr();
randomize();
inta[11],opc;
while(1)
{
cout<<"MENU\n1.Ordenacionporintercambiodirecto\n2.Ordenacionporle
metododeintercambiodirectoconseal\n";cout<<"3.Shakersort
(sacudida)\n4.Ordenacionporinserciondirecta\n5.Insercionbinaria\n";
cout<<"6.Ordenacionporselecciondirecta\n7.Shell\n8.Ordenacion
rapida(Quicksort)\n";cout<<"9.Ordenacionporelmetododelmonticulo\n10.
Salir\n";
cout<<"Seleccioneunaopcion:";
cin>>opc;
switch(opc)
{
case1:
llenar(a);
cout<<"\nArregloDesordenado\n";
imprimir(a);burbuja(a);cout<<"\nArregloOrdenado\n";imprimir(a);break;
case2:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);burbuja2(a);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case3:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);shakersort(a);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case4:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);idirecta(a);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case5:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);ibinaria(a);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case6:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);sdirecta(a);

138

cout<<"\nArregloOrdenado\n";imprimir(a);break;
case7:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);shell(a);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case8:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);quicksort(a,10);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case9:
llenar(a);cout<<"\nArregloDesordenado\n";imprimir(a);monticulo(a,10);
cout<<"\nArregloOrdenado\n";imprimir(a);break;
case10:
exit(0);
break;
}
}
}

voidllenar(intb[])
{
inti;
for(i=1;i<=10;i++)
b[i]=1+rand()%20;
}

voidimprimir(intb[])
{
inti;
for(i=1;i<=10;i++)
cout<<b[i]<<"";
cout<<"\n";
}

voidburbuja(intb[])
{
inti,j,aux;
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
if(b[j]>b[j+1])
{
aux=b[j];
b[j]=b[j+1];
b[j+1]=aux;

139

}
}
}
}

voidburbuja2(intb[])
{
inti=1,aux=0,j,temp;
while(i<=9&&aux==0)
{
aux=1;
for(j=1;j<=9;j++)
{
if(b[j]>b[j+1])
{
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
aux=0;
}
}
i++;
}
}

voidshakersort(intb[])
{
inti,izq,der,k,aux;
izq=2;
der=10;
k=10;
while(der>=izq)
{
for(i=der;i>=izq;i)
{
if(b[i1]>b[i])
{
aux=b[i1];
b[i1]=b[i];
b[i]=aux;
k=i;
}
}
izq=k+1;

140

for(i=izq;i<=der;i++)
{
if(b[i1]>b[i])
{
aux=b[i1];
b[i1]=b[i];
b[i]=aux;
k=i;
}
}
der=k1;
}
}


voididirecta(intb[])
{
inti,aux,k;
for(i=2;i<=10;i++)
{
aux=b[i];
k=i1;
while(k>=1&&aux<b[k])
{
b[k+1]=b[k];
k=k1;
}
b[k+1]=aux;
}
}
voidibinaria(intb[])
{
inti,j,aux,izq,der,m;
for(i=2;i<=10;i++)
{
aux=b[i];
izq=1;
der=i1;
while(izq<=der)
{
m=(izq+der)/2;
if(aux<=b[m])
{
der=m1;

141

}
else
{
izq=m+1;
}
}
j=i1;
while(j>=izq)
{
b[j+1]=b[j];
j;
}
b[izq]=aux;
}
}


voidsdirecta(intb[])
{
inti,menor,k,j;
for(i=1;i<10;i++)
{
menor=b[i];
k=i;
for(j=i+1;j<=10;j++)
{
if(b[j]<menor)
{
menor=b[j];
k=j;
}
}
b[k]=b[i];
b[i]=menor;
}
}
voidshell(intb[])
{
intentero,i,aux,band;
entero=11;
while(entero>1)
{
entero=entero/2;
band=1;

142

while(band==1)
{
band=0;
i=1;
while((i+entero)<=10)
{
if(b[i]>b[i+entero])
{
aux=b[i];
b[i]=b[i+entero];
b[i+entero]=aux;
band=1;
}
i++;
}
}
}
}

voidquicksort(intb[],intt=10)
{
reduce_recursivo(1,10,b);
}
voidreduce_recursivo(intini,intfin,intb[])
{
intizq,der,pos,aux,band;
izq=ini;
der=fin;
pos=ini;
band=1;
while(band==1)
{
band=0;
while((b[pos]<=b[der])&&(pos!=der))
{
der;
}
if(pos!=der)
{
aux=b[pos];
b[pos]=b[der];
b[der]=aux;
pos=der;
while((b[pos]>=b[izq])&&(pos!=izq))

143

{
izq++;
}

if(pos!=izq)
{
band=1;
aux=b[pos];
b[pos]=b[izq];
b[izq]=aux;
pos=izq;
}
}
}
if((pos1)>ini)
{
reduce_recursivo(ini,(pos1),b);
}
if(fin>(pos+1))
{
reduce_recursivo((pos+1),fin,b);
}
}

voidmonticulo(intb[],intN)
{
intopc2;
cout<<"1.Insertar\n2.Eliminar\nSeleccioneunaopcion:";
cin>>opc2;
switch(opc2)
{
case1:
inserta_monticulo(b,N);imprimir(b);break;
case2:
elimina_monticulo(b,N);imprimir(b);break;
}
}

voidinserta_monticulo(intb[],intN)
{
inti,k,aux,band;
for(i=2;i<=N;i++)
{
k=i;

144

band=1;
while((k>1)&&(band==1))
{
band=0;
if(b[k]>(b[k/2]))
{
aux=b[k/2];
b[k/2]=b[k];
b[k]=aux;
k=k/2;
band=1;
}
}
}
}

voidelimina_monticulo(intb[],intN)
{
inti,aux,izq,der,k,ap,bool,mayor;
for(i=N;i>=2;i)
{
aux=b[i];
b[i]=b[1];
izq=2;
der=3;
k=1;
bool=1;
while((izq<i)&&(bool==1))
{
mayor=b[izq];
ap=izq;
if((mayor<b[der])&&(der!=1))
{
mayor=b[der];
ap=der;
}
if(aux<mayor)
{
b[k]=b[ap];
k=ap;
}
else
{
bool=0;

145

}
izq=k*2;
der=izq+1;
}
b[k]=aux;
}
}




5. Cuestionario[Trabajocomplementario]

1. Realiceelanlisisdeeficienciadecadaunodelosmtodosanalizados,donde
sereflejenlasventajasydesventajasdelosmismos.

6. Conclusiones

146

Vous aimerez peut-être aussi