Upload
others
View
16
Download
0
Embed Size (px)
Citation preview
28/03/2014
1
Fundamentos de la programación
7GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware
GradoenIngenieríadeComputadores
FacultaddeInformáticaUniversidadComplutense
Luis He
rnánde
z Yáñez
Página 1Fundamentos de la programación: Algoritmos de ordenación
Algoritmos de ordenación 2Ordenación por inserción 4
Versión optimizada 12Claves de ordenación 15Estabilidad de la ordenación 21Casos de estudio (naturalidad) 24Complejidad y eficiencia 25
Ordenación por selección 30Método de la burbuja 34
Versión optimizada 38 Búsqueda secuencial 40Búsqueda binaria 42Órdenes de complejidad 51Inserción y eliminación en listas ordenadas 52Mezcla de listas ordenadas 57
28/03/2014
2
Luis He
rnánde
z Yáñez
Ordenacióndelistas
Tareamuyhabitual:paramostrarlosdatosenordenoparafacilitarlasbúsquedas.Variadasformasdehacerlo(algoritmos),conmayoromenorrapidez.
Página 2Fundamentos de programación: Algoritmos de ordenación
array125.40 76.95 328.80 254.62 435.00 164.29 316.05 219.99 93.45 756.62
0 1 2 3 4 5 6 7 8 9
array76.95 93.45 125.40 164.29 219.99 254.62 316.05 328.80 435.00 756.62
0 1 2 3 4 5 6 7 8 9
Algoritmodeordenación(menoramayor)
Algoritmodeordenación(menoramayor)
array[i]
28/03/2014
3
Luis He
rnánde
z Yáñez
OrdenacióndearraysporinserciónElarraycontieneinicialmentelalistadesordenada:
Amedidaquevayamosinsertandoloselementosensulugar,unapartedelarraycorresponderáalalistaordenadayelrestoaloselementosquetodavíaquedanporprocesar.
Página 4Fundamentos de programación: Algoritmos de ordenación
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
7 14 20 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
ParteyaordenadaParteyaordenada ElementosporinsertarElementosporinsertar
SiguienteelementoainsertarSiguienteelementoainsertar
Luis He
rnánde
z Yáñez
OrdenacióndearraysporinserciónSituacióninicial:Listaordenadaconunsoloelemento.Elprimerodelarray:
Desdeelsegundoelementohastaelúltimo:
Insertamoselelementoenlaparteordenada
Localizamoslaposicióndelprimerelementoestrictamentemayor…
Página 5Fundamentos de programación: Algoritmos de ordenación
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
ÚltimoelementodelaparteordenadaÚltimoelementodelaparteordenada7elementoelemento
28/03/2014
4
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserción… Desplazamosunaposiciónaladerechatodoslosestrictamentemayores.
Ycolocamoselelementoencursoenlaposiciónquequedalibre.
Página 6Fundamentos de programación: Algoritmos de ordenación
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
7elementoelemento
7 20 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
7elementoelemento
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserciónconst int N = 10;typedef double tLista[N];tLista lista;double elemento;...for (int i = 1; i primer elemento mayorfor (int j = i; j > pos; j‐‐) lista[j] = lista[j‐1];lista[pos] = elemento;
}}
Página 7Fundamentos de programación: Algoritmos de ordenación
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
28/03/2014
5
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserción
Página 8Fundamentos de programación: Algoritmos de ordenación
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
20 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
7elementoelemento0pospos1ii
7 20 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserción
Página 9Fundamentos de programación: Algoritmos de ordenación
7 14 20 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
7 14 20 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
7 14 20 32 14 27 12 13 150 1 2 3 4 5 6 7 8 9
5 7 14 20 32 14 27 12 13 150 1 2 3 4 5 6 7 8 9
5elementoelemento0pospos4ii
28/03/2014
6
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserción
Página 10Fundamentos de programación: Algoritmos de ordenación
5 7 14 20 32 14 27 12 13 150 1 2 3 4 5 6 7 8 9
5 7 14 20 32 14 27 12 13 150 1 2 3 4 5 6 7 8 9
5 7 14 20 32 27 12 13 150 1 2 3 4 5 6 7 8 9
5 7 14 14 20 32 27 12 13 150 1 2 3 4 5 6 7 8 9
14elementoelemento3pospos5ii
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserción(versiónoptimizada)Lainsercióndecadaelementoensuposiciónadecuadasepuedellevaracabomedianteunaseriedecomparacioneseintercambios:
Desdeelsegundoelementohastaelúltimo: Obtenerelelemento Buscamoselprimerdatomenoroigual,explorandolazonayaordenadadederechaaizquierda,abriendohuecoalmismotiempo
Página 11Fundamentos de programación: Algoritmos de ordenación
5 7 14 20 32 15 27 12 13 150 1 2 3 4 5 6 7 8 9
5 7 14 20 32 32 27 12 13 150 1 2 3 4 5 6 7 8 9
5 7 14 20 20 32 27 12 13 150 1 2 3 4 5 6 7 8 9
15elementoelemento
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
28/03/2014
7
Luis He
rnánde
z Yáñez
Ordenacióndearraysporinserción(versiónoptimizada)const int N = 10;typedef double tLista[N];tLista lista;...for (int i = 1; i =1bool enc = lista[pos] 0) && !enc) {lista[pos+1] = lista[pos];pos‐‐;enc = lista[pos]
28/03/2014
8
Luis He
rnánde
z Yáñez
...ordenarInsercion(lista);
cout
28/03/2014
9
Luis He
rnánde
z Yáñez
ClavesdeordenaciónPodemoscrearunafunciónparaeloperadorrelacional:bool operator>(tDato opIzq, tDato opDer) {return opIzq.nombre > opDer.nombre;
}
Enelmétododeinserción“estándar”if(lista[pos] > elemento) enc= true;else pos++;
Enelmétododeinserciónoptimizadoenc = !(lista[pos] > elemento); //a≤b ↔ !(a>b)
Página 16Fundamentos de programación: Algoritmos de ordenación
tDato elemento;
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
Luis He
rnánde
z Yáñez
Clavesdeordenación#include #include #include using namespace std;#include const int N = 100;typedef struct {int codigo;string nombre;double sueldo;
} tDato;typedef struct {tDato datos[N];int cont;
} tLista;
void ordenarInsercion(tLista& lista);bool operator>(const tDato& opIzq, const tDato& opDer);void mostrar(const tLista& lista);void cargar(ifstream& ent, tLista& lista);
Página 17Fundamentos de programación: Algoritmos de ordenación
28/03/2014
10
Luis He
rnánde
z Yáñez
int main() {tLista lista;lista.cont = 0;ifstream archivo;archivo.open("datos.txt");if (!archivo.is_open()) {cout
28/03/2014
11
Luis He
rnánde
z Yáñez
...
void mostrar(const tLista& lista) {for (int i = 0; i
28/03/2014
12
Luis He
rnánde
z Yáñez
EstabilidaddelaordenaciónSiahoraordenamosporelcampoCodigo:
Página 22Fundamentos de programación: Algoritmos de ordenación
10000 Sergei 10000010000 Hernández 15000011111 Benítez 10000011111 Urpiano 9000011111 Pérez 9000011111 Durán 12000012345 Alvarez 12000012345 Gómez 10000012345 Sánchez 9000012345 Turégano 10000021112 Domínguez 9000021112 Jiménez 10000022222 Fernández 12000033333 Tarazona 120000
10000 Hernández 15000010000 Sergei 10000011111 Benítez 10000011111 Durán 12000011111 Pérez 9000011111 Urpiano 9000012345 Alvarez 12000012345 Gómez 10000012345 Sánchez 9000012345 Turégano 10000021112 Domínguez 9000021112 Jiménez 10000022222 Fernández 12000033333 Tarazona 120000
Noestable:Losnombresnomantienensusposicionesrelativas.
Noestable:Losnombresnomantienensusposicionesrelativas.
Estable:Losnombresmantienensusposicionesrelativas.
Estable:Losnombresmantienensusposicionesrelativas.
Luis He
rnánde
z Yáñez
EstabilidaddelaordenaciónLosdosmétodosdeordenaciónporinserciónquehemosvistosonestables.Nolosonseríansiusáramoslassiguientescomparaciones:
Enelmétododeinserción“estándar”if(lista[pos] >= elemento) enc= true;else pos++;
Enelmétododeinserciónoptimizadoenc = lista[pos]
28/03/2014
13
Luis He
rnánde
z Yáñez
Casosdeestudio Listainicialmenteordenada. Listainicialmenteinversamenteordenada. Listacondisposiciónaleatoria¿Trabajamenos,másoiguallaordenaciónencadacaso?Sielalgoritmodeordenacióntrabajamenoscuantomásordenadaestáinicialmentelalista,sedicequelaordenaciónesnatural.Ordenaciónporinserciónconlalistainicialmenteordenada: Versiónestándar:
Seahorralosdesplazamientos,perohaceelmáximonúmerodecomparaciones.Nonatural.
Versiónoptimizada:Trabajamuchomenos,yaquebastaunacomparacióncadavez.Natural.
Página 24Fundamentos de programación: Algoritmos de ordenación
Luis He
rnánde
z Yáñez
ComplejidadyeficienciaMidelacantidadderecursosentiempo(yespacio)quenecesitaunalgoritmopararesolverunproblema.Lacomplejidadalgorítmicanoproporcionanmedidasabsolutassinomedidasrelativasaltamañodelproblema.
Eltiempo(medidoenpasos)requeridoporunalgoritmoenfuncióndeltamañodelosdatos:T(N)Contaremoslasoperacionesquerealizaelalgoritmoenbasealadimensióndelalistaaordenar.Enestecaso: Comparaciones AsignacionesencomponentesdelarrayAsumimosqueambasrequierenuntiemposimilar.
Página 25Fundamentos de programación: Algoritmos de ordenación
28/03/2014
14
Luis He
rnánde
z Yáñez
ComplejidadyeficienciaOrdenaciónporinserciónoptimizada:...for (int i = 1; i =1bool enc = lista[pos] 0) && !enc) {
lista[pos+1] = lista[pos];pos‐‐;enc = lista[pos]
28/03/2014
15
Luis He
rnánde
z Yáñez
ComplejidadyeficienciaOrdenaciónporinserciónoptimizada: Casomejor:listainicialmenteordenada
Laprimeracomparaciónfallaynoserealizaningúnintercambio.T(N)=(N‐1)*(1comparación+1asignación)
Casopeor:listainicialmenteordenadaalrevésParacadapos,entrei‐1y1,serealiza1asignacióny1comparación.Además1comparaciónantesy2asignacionesdespués
Página 28Fundamentos de programación: Algoritmos de ordenación
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
Luis He
rnánde
z Yáñez
ComplejidadyeficienciaOrdenaciónporinserción(optimizada): Casomejor:T(N)=2N‐ 2
SedicequetienecomplejidadlinealT(N)O(N)
Casopeor:T(N)=N2 ‐ 1SedicequetienecomplejidadcuadráticaT(N)O(N2)
Casomedio(distribuciónaleatoriadeloselementos)T(N)O(N2)
Hayalgoritmosdeordenaciónmejores!
Página 29Fundamentos de programación: Algoritmos de ordenación
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
28/03/2014
16
Luis He
rnánde
z Yáñez
Algoritmodeordenaciónporseleccióndirecta
Desdelaprimeraposición,i =0,hastalapenúltima(N‐2): Calcularm: posiciónconelmenorelementoen[i..(N‐1)] Intercambiarelelementodelaposicióni coneldelaposiciónm
Página 30Fundamentos de programación: Algoritmos de ordenación
20 7 14 32 5 14 27 12 13 150 1 2 3 4 5 6 7 8 9
mmii
5 7 14 32 20 14 27 12 13 150 1 2 3 4 5 6 7 8 9
mmiiSólointercambiamossinoeslamismaposiciónSólointercambiamossinoeslamismaposición
Luis He
rnánde
z Yáñez
Algoritmodeordenaciónporseleccióndirecta
Página 31Fundamentos de programación: Algoritmos de ordenación
5 7 14 32 20 14 27 12 13 150 1 2 3 4 5 6 7 8 9
mmii
5 7 12 32 20 14 27 14 13 150 1 2 3 4 5 6 7 8 9
mmii
5 7 12 13 20 14 27 14 32 150 1 2 3 4 5 6 7 8 9
mmii
28/03/2014
17
Luis He
rnánde
z Yáñez
Algoritmodeordenaciónporseleccióndirectaconst int N = 10;typedef double tLista[N];tLista lista;double tmp;...for (int i = 0; i
28/03/2014
18
Luis He
rnánde
z Yáñez
AlgoritmodeordenaciónporelmétododelaburbujaEsunavariacióndelmétododeseleccióndirecta.Elelementomenorvasubiendohastaalcanzarsuposicióndefinitiva,comounaburbujaenelaguasubehacialasuperficie.
Página 34Fundamentos de programación: Algoritmos de ordenación
6
3
1
9
4
6
3
1
9
4
6
1
3
9
4
6
4
3
9
1
6
4
3
1
9
Luis He
rnánde
z Yáñez
Página 35Fundamentos de programación: Algoritmos de ordenación
12 32 14 5 14 70 1 2 3 4 5
12 32 14 5 7 140 1 2 3 4 5
12 32 14 5 7 140 1 2 3 4 5
12 32 5 14 7 140 1 2 3 4 5
12 5 32 14 7 140 1 2 3 4 5
5 12 32 14 7 140 1 2 3 4 5
28/03/2014
19
Luis He
rnánde
z Yáñez
AlgoritmodeordenaciónporelmétododelaburbujaDesdelaprimeraposición,i =0,hastalapenúltima(N‐2):Desdelaúltimaposición ,j =N‐1,hastai+1 hacer:Sielelementoenj esmenorqueelelementoenj‐1,intercambiarlos
const int N = 10;typedef double tLista[N];tLista lista;double tmp;...for (int i = 0; i i; j‐‐)// Desde el último hasta el siguiente a iif (lista[j]
28/03/2014
20
Luis He
rnánde
z Yáñez
Métododelaburbujamejoradoconst int N = 10;typedef double tLista[N];tLista lista;bool subirBurbuja( int i, tLista& lista);// Sube la burbuja en lista[i+1..N‐1]// i
28/03/2014
21
Luis He
rnánde
z Yáñez
BúsquedasecuencialEnlassecuenciasnoordenadasbuscamosrecorriendohastaqueencontremoselelementoolleguemosalfinal.Silasecuenciaolistaestáordenadapodemospararantesdellegaralfinalenelcasodequeelelementonoesté.
Si,porejemplo,buscamosel17,alllegaral20yasabremosquenoestá,puesacontinuacióntodoslosvaloresson>=20y,porlotanto>17.
Consecuencia:setratadebuscarelprimerelementodelalistaqueseamayoroigualqueeldatoquesebusca.
Página 40Fundamentos de programación: Algoritmos de ordenación
5 7 12 13 14 14 15 20 27 320 1 2 3 4 5 6 7 8 9
Luis He
rnánde
z Yáñez
Búsquedasecuencialconst int N = 10;typedef double tLista[N];tLista lista; // lista ordenada double buscado;
int i = 0; bool encontrado = false;
// Búsqueda asimétricawhile ((i = buscado) encontrado = true; else i++;
}
// CASOS:// encontrado && (lista[i] == buscado): Encontrado en la posición i // encontrado && (lista[i] > buscado): No encontrado, // debería estar justo antes que lista[i]// !encontrado: No encontrado, debería estar detrás de todos
if(encontrado && (lista[i] == buscado)) { // Encontrado!!...
}
Página 41Fundamentos de programación: Algoritmos de ordenación
ComplejidadlinealO(N)
Invariante:lista[0 … i‐1]
28/03/2014
22
Luis He
rnánde
z Yáñez
BúsquedabinariaUnaformamuchomásrápidadebuscarqueaprovechalaordenación.Comparamosconelvalorqueestéenelmediodelalista.
Sieselquebuscamos,terminamos. Sino,buscamosenlaprimeramitaddelalistasieseelementoesmayorqueelquebuscamosyenlasegundamitadencasocontrario.
Repetimoselprocesohastaencontrarlooquedarnossinsublista.
Página 42Fundamentos de programación: Algoritmos de ordenación
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
Sibuscamosel12:
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
Luis He
rnánde
z Yáñez
BúsquedabinariaVamosbuscandoensublistascadavezmáspequeñas.Debemoslimitarelsegmentodelalistadondeestamosbuscando.Inicialmentetenemostodalalista:
Elíndicedelelementoenlamitades:mitad = (ini + fin) / 2Sinosehaencontrado,¿dóndehayquebuscaracontinuación? Sielbuscadoesmenorqueelqueestáenlamitad:fin = mitad ‐ 1 Sielbuscadoesmayorqueelqueestáenlamitad:ini = mitad + 1
Página 43Fundamentos de programación: Algoritmos de ordenación
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
iniini finfinmitadmitad
28/03/2014
23
Luis He
rnánde
z Yáñez
Búsquedabinaria
12 lista[mitad] ini = mitad + 1
Página 44Fundamentos de programación: Algoritmos de ordenación
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
iniini finfinmitadmitad
Buscamosel12
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
iniini finfinmitadmitad
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
iniini finfin
mitadmitad ¡Encontrado!
Luis He
rnánde
z Yáñez
BúsquedabinariaSielelementonoestá,acabaremosquedándonossinsublista:ini > fin
13 > lista[mitad] ini = mitad + 1
13 fin !!! Nohayyadóndeseguirbuscando Noestá.Página 45Fundamentos de programación: Algoritmos de ordenación
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
mitadmitadiniini finfin
5 7 12 14 14 15 18 20 27 320 1 2 3 4 5 6 7 8 9
iniinifinfin
mitadmitad
Parael13:
28/03/2014
24
Luis He
rnánde
z Yáñez
Búsquedabinariaconst int N = 10;typedef double tLista[N];tLista lista;...double buscado;cout buscado;int ini = 0, fin = N – 1, mitad;bool encontrado = false;while ((ini
28/03/2014
25
Luis He
rnánde
z Yáñez
...int dato;while (archivo >> dato) {lista.elementos[lista.cont] = dato;lista.cont++;
}for (int i = 0; i
28/03/2014
26
Luis He
rnánde
z Yáñez
Búsquedabinaria¿Quéordendecomplejidadtiene?Casopeor:Elelementonoestáenlalistaoseencuentraensublistade1elemento.Nºdecomparaciones=Nºdevueltasqueseejecutaelwhile
=NºdevecesquevisitamoselíndicemitadparapartirlasublistaN → N 2 → N 4 → N 8 →… → 4 → 2 → 1 →
0 Fallo!Éxito!
Elnúmerodevueltasenelpeorcasoeselnúmerodeflechas→SihacemosqueNseaiguala2k,esaseriequedacomo:
2 → 2 → 2 → 2 →… → 2 → 2 → 2 → 0 Fallo!Éxito!Entotalk+1vueltas:
Complejidadlogarítmica:T(N) O(log2 N)
Página 50Fundamentos de programación: Algoritmos de ordenación
N=2k T(N)=1+log2 N
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
Luis He
rnánde
z Yáñez
Órdenesdecomplejidad
O(logN)<O(N)<O(NlogN)<O(N2)<O(N3)...
N log2 N N2
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐1 0 12 1 44 2 168 3 6416 4 25632 5 102464 6 4096128 7 16384256 8 65536...
Página 51Fundamentos de programación: Algoritmos de ordenación
28/03/2014
27
Luis He
rnánde
z Yáñez
InsercionesyeliminacionesenlistasordenadasHayqueinsertardeformaquelalistasigaordenada:
Buscarellugar,desplazarlossiguientesaladerechaycolocar.Aleliminarnohayquedejarhuecos.Porejemplo,insertamosel10:
Página 52Fundamentos de programación: Algoritmos de ordenación
5 7 12 14 14 15 18 20 270 1 2 3 4 5 6 7 8 9
5 7 12 14 14 15 18 20 270 1 2 3 4 5 6 7 8 9
5 7 10 12 14 14 15 18 20 270 1 2 3 4 5 6 7 8 9
¡Errorsilalistaestállena!¡Errorsilalistaestállena!
Luis He
rnánde
z Yáñez
InsercionesyeliminacionesenlistasordenadasPorejemplo,eliminamosel7(el2º):
Página 53Fundamentos de programación: Algoritmos de ordenación
5 10 12 14 14 15 18 20 270 1 2 3 4 5 6 7 8 9
5 7 10 12 14 14 15 18 20 270 1 2 3 4 5 6 7 8 9
5 10 12 14 14 15 18 20 270 1 2 3 4 5 6 7 8 9
¡Errorsilaposiciónnoesválida!¡Errorsilaposiciónnoesválida!
28/03/2014
28
Luis He
rnánde
z Yáñez
GestióndeunatabladedatosordenadaTeproporcionamosunejemplobastantecompletodegestióndeunatabladedatosordenadaporuncamponombre:const int N = 100;typedef struct {int codigo;string nombre;double sueldo;
} tRegistro;
typedef tRegistro tLista[N];
typedef struct {tLista registros;int cont;
} tTabla;
Página 54Fundamentos de programación: Algoritmos de ordenación
tabla.cpp
Luis He
rnánde
z Yáñez
GestióndeunatabladedatosordenadaIncluyeestossubprogramas:void mostrarDato(int pos, tRegistro registro);// Línea con los datos del registro precedidos de su posiciónvoid mostrar(const tTabla& tabla);bool operator>(tRegistro opIzq, tRegistro opDer);bool operator
28/03/2014
29
Luis He
rnánde
z Yáñez
Página 56Fundamentos de programación: Algoritmos de ordenación
Luis He
rnánde
z Yáñez
Mezcladedoslistasordenadasenarraysconst int N = 100;typedef struct {int elementos[N];int cont;
} tLista;
Uníndiceparacadalista,inicializadosa0(principiodelaslistas).
Página 57Fundamentos de programación: Algoritmos de ordenación
Mientrasquenolleguemosalfinaldealgunadelasdoslistas:• Elegimoselelementomenordelosquetienenesosíndices.• Locopiamosenlalistaresultadoyavanzamoseseíndiceunaposición.
Copiamoslosquequedenenlalistaquenosehayaacabadoenlalistaresultado.
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
28/03/2014
30
Luis He
rnánde
z Yáñez
Mezcladedoslistasordenadasenarrays
void mezcla(tLista lista1, tLista lista2, tLista& listaM) {int pos1 = 0, pos2 = 0;int cont = 0;bool enc = (cont==N);
// buscamos el N‐ésimo dato introducido en listaMwhile ((pos1
28/03/2014
31
Luis He
rnánde
z Yáñez
Mezcladedoslistasordenadasenarchivosbool mezcla(string nombre1, string nombre2, string nombreM) {// Mezcla las secuencias en los archivos nombre1 y nombre2// generando la secuencia mezclada en el archivo nombreMifstream archivo1, archivo2;ofstream mezcla;bool ok = true;archivo1.open(nombre1.c_str());if (!archivo1.is_open())ok = false;
else {archivo2.open(nombre2.c_str());if (!archivo2.is_open())ok = false;
else { // Ambos archivos existenmezcla.open(nombreM.c_str());int dato1, dato2;bool eof1, eof2;eof1 = !(archivo1 >> dato1);eof2 = !(archivo2 >> dato2); ...
Página 60Fundamentos de programación: Algoritmos de ordenación
Pedro J. Martín
de la Calle
Pedro J. Martín
de la Calle
Luis He
rnánde
z Yáñez
Mezcladedoslistasordenadasenarchivos... while (!eof1 && !eof2) { // Recorrido:
if (dato1
28/03/2014
32
Luis He
rnánde
z Yáñez
ProgramaciónenC++paraingenierosF.Xhafa etal.Thomson,2006
EllenguajedeprogramaciónC++ (Ediciónespecial)B.Stroustrup.Addison‐Wesley,2002
Fundamentos de programación: Algoritmos de ordenación Página 62
Luis He
rnánde
z Yáñez
LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.Estedocumentotieneestablecidaslassiguientes:
Pulsaenlaimagendearribaaladerechaparasabermás.
Fundamentos de programación: Algoritmos de ordenación Página 63
Reconocimiento(Attribution):Encualquierexplotacióndelaobraautorizadaporlalicenciaharáfaltareconocerlaautoría.Nocomercial(Noncommercial):Laexplotacióndelaobraquedalimitadaausosnocomerciales.Compartirigual(Sharealike):Laexplotaciónautorizadaincluyelacreacióndeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.