Académique Documents
Professionnel Documents
Culture Documents
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
114
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
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
Mtododeinsercindirecta
Estemtodoconsisteeninsertarcadaelemento,comenzandoporelsegundoy
hastaelfinal,enlugarquelecorrespondeenlasecuenciaquesevaformandoa
suizquierda.
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
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
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.
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
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
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
Shellproponequelascomparacionesentreelementosseefectenconsaltosde
mayortamao,peroconincrementosdecrecientes,asloselementosquedarn
ordenadosenelarreglomsrpidamente.
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.
MtododeOrdenacinRpida(QuickSort)
130
1. SetomaunelementoXdeunaposicincualquieradelarreglo.
3. Serepitenlospasosanteriores,peroahoraparalosconjuntosdedatos
que se encuentran a la izquierda y a la derecha de la posicin X en el
arreglo.
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
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