Universidad Nacional Experimental Politcnica de la uerza !rmada Bolivariana Unefa"#arpano$ Estado %ucre &en'ua(e de Pro'ramaci)n ** Mtodos de ordenamiento y Bsqueda (Continuacin de la clase anterior) Prof. ngel Crespo Ordenamiento por insercin: #onsiste en+ ,- .omar cada elemento del arre'lo para ser ordenado- /- &o compara con los 0ue se encuentran en posiciones anteriores a l dentro del arre'lo- 1- %i el elemento con el 0ue se compara es ma2or3menor$ se recorre 4acia la si'uiente posici)n superior- De lo contrario$ se detiene el proceso de comparaci)n 2a 0ue se encontr) 0ue el elemento 2a est5 ordenado 2 se coloca en su posici)n- E(emplo+ #rear un pro'rama 0ue permita ordenar a travs del mtodo de inserci)n 2 de forma ascendente$ los elementos de un arre'lo de tama6o diez 7,89- :include;stdio-4< :include;conio-4< int main79= int a>,888?$ n$ i$ ($ aux@ for7iA8@i;n@iBB9= printf7CiADd""""<C$ i9@ scanf7CDdC$ Ea>i?9@ 33car'a del arre'lo vector- F for7iA,@ i;,8@iBB9= auxAa>i?@ 33primer paso- (Ai",@ G4ile7a>(?<aux9= 33se'undo paso- a>(B,?Aa>(?@ 33tercer paso- (""@ F a>(B,?Aaux@ F printf7CordenadasHInC9@ for7iA8@ i;,8@ iBB9= printf7CDdInC$ a>i?9@ F 'etc479@ F Ordenamiento por seleccin: #onsiste en lo si'uiente+ %e busca la posici)n del elemento menor3ma2or de la lista$ para identificarlo dentro de los dem5s elementos- Una vez ubicado$ se intercambia con el elemento ubicado en la primera posici)n de la lista- Busca el se'undo elemento menor3ma2or de la lista- %e intercambia con el elemento 0ue ocupa la se'unda posici)n en la lista- %e repite este proceso 4asta 0ue 4aber ordenado toda la lista- Es de 4acer notar entonces 0ue para cumplir con el ordenamiento por selecci)n$ se debe tener dominio de la bs0ueda de elementos- En el e(emplo$ se tiene un tipo de bs0ueda secuencial o lineal 7m5s adelante se explica en 0u consiste9- E(emplo+ #rear un pro'rama 0ue permita ordenar a travs del mtodo de inserci)n 2 de forma ascendente$ los elementos de un arre'lo de tama6o diez 7,89- :include;stdio-4< :include;conio-4< int men7int a>?$ int n$ int i9= 33primer paso- int menorA,888@ int ($J@ for7JAi@ J;n@ JBB9= if7a>J?;menor9= menorAa>J?@ (AJ@ F F return (@ F main79= int a>,88?$ n$ i$ posm$ aux@ for 7iA8@ i;,8@ iBB9 scanf7CDdC$ Ea>i?9@ 33car'a del arre'lo-
printf7CordenamientoInC9@ for 7iA8@ i;,8@ iBB9= posmAmen7a$ ,8$ i9@ auxAa>i?@ a>i?Aa>posm?@ 33se'undo paso- a>posm?Aaux@ F for 7iA8@ i;,8@ iBB9= printf7CDdInC$ a>i?9@ F 'etc479@ F Bsqueda: %e refiere al proceso de encontrar dentro de una colecci)n de elementos$ un valor en particular- .ambin se puede decir 0ue es una operaci)n 0ue tienen por ob(eto la localizaci)n de un elemento dentro de una estructura de datos- !l'unos tipos de bs0ueda+ Bsqueda lineal o secuencial: #onsiste en$ sustancialmente$ comparar cada uno de los elementos con el valor a buscar- Dado 0ue el arre'lo vector no tiene nin'n orden en particular$ existe la misma probabilidad de 0ue el valor se encuentre$ 2a sea en el primer elemento 0ue en el ltimo- Por lo tanto$ en promedio$ el pro'rama tendr5 0ue comparar el valor buscado con la mitad de los elementos existentes- El mtodo de bs0ueda lineal funciona bien para una colecci)n de elementos pe0ue6a o no ordenados- Por lo 0ue es ineficiente para colecciones de ma2or tama6o- E(emplo+ #rear un pro'rama 0ue permita buscar a travs del mtodo de bs0ueda lineal$ un valor dado en un arre'lo de tama6o diez 7,89- :include;stdio-4< :include;conio-4< :include;stdlib-4< int bus7int a>?$ int val$ int n9= int i@ for7iA8@ i;n@ iBB9 if7a>i?AAval9 return i@ return 8@ F main79= int a>,88?$ n$ val,$ pos$ i@ printf7Ccuantos valoresH C9@ scanf7CDdC$ En9@ for7iA8@ i;n@ iBB9 a>i?Arand79D,88@ 33car'a de forma aleatoria el arre'lo- printf7Cvalor a buscar+ C9@ scanf7CDdC$ Eval,9@ posAbus7a$ val,$ n9@ if7posAA89 printf7Cno encontradoInC9@ else printf7Cposici)n+ >Dd?""""< DdInC$ pos$ a>pos?9@ printf7Clos valores in'resados son+InC9@ for7iA8@ i;n@ iBB9 printf7C< Dd C$ a>i?9@ printf7CInC9@ 'etc479@ F Bsqueda binaria: Despus de cada una de las comparaciones elimina la mitad de los elementos en la estructura de datos ba(o bs0ueda- ,- %e localiza el elemento medio 2 se compara con el valor buscado- /- %i son i'uales el valor de bs0ueda 4a sido encontrada$ 2 se re'resa el subKndice del arre'lo correspondiente a dic4o elemento- 1- %i no son i'uales$ el problema se reduce a buscar en una mitad del arre'lo- %i el valor buscado es menor 0ue el elemento medio del arre'lo$ se se'uir5 buscando en la primea parte del arre'lo$ de lo contrario se buscar5 en la se'unda parte- L- %i el valor buscado no se encuentra en el subarre'lo especificado 7es la porci)n del arre'lo ori'inal9$ el al'oritmo se repite en una cuarta parte del arre'lo ori'inal- En fin$ bs0ueda contina$ 4asta 0ue el valor buscado es i'ual al elemento del medio del subarre'lo$ o 4asta 0ue el subarre'lo 4a 0uedado reducido a un elemento diferente a el valor buscado 7es decir$ el valor buscado no 4a sido encontrado9- Es de resaltar 0ue el al'oritmo de bs0ueda binaria es muc4o m5s eficiente$ 2a 0ue permite un nmero de comparaciones menor$ lo 0ue se traduce en un me(or rendimiento con respecto a la bs0ueda lineal$ 2 con la diferencia 0ue s)lo es til si los valores est5n ordenados de forma ascendente- Por lo tanto$ los valores primero deben ordenarse- Por lo tanto$ en el e(emplo a continuaci)n se tiene$ antes de implementar la bs0ueda$ la llamada a un ordenamiento tipo burbu(a de forma ascendente- E(emplo+ #rear un pro'rama 0ue permita buscar a travs del mtodo de bs0ueda binaria$ un valor dado en un arre'lo de tama6o diez 7,89- :include;stdio-4< :include;stdlib-4< void orden7int a>?$ int i$ int (9= 33funcion ordena el arre'lo vector- int aux@ auxAa>i?@ a>i?Aa>(?@ a>(?Aaux@ F int bin7int a>?$ int val$ int l$ int 49= int cen@ G4ile7l;A49= 33cuarto paso- cenA7lB493/@ if7valAAa>cen?9 33primer paso- return cen@ 33se'undo paso- else if 7val;a>cen?9 4Acen",@ else lAcenB,@ 33tercer paso- F return ",@ F main79= int a>,M?$ i$ val$ res$ (@ printf7C#ar'ar valores al arre'lo vectorInC9@ for7iA8@ i;,8@ iBB9 scanf7CDdC$ Ea>i?9@ printf7CNrdenando elementos---InC9@ for7iA8@ i;,8@ iBB9 for7(Ai@ (;,8@ (BB9 if7a>i?<a>(?9 orden7a$ i$ (9@ printf7CMostrando el arre'lo ordenadoInC9@ for7iA8@ i;,8@ iBB9 printf7CValor""< DdInC$ a>i?9@ printf7Cin'rese el valor a buscar+ C9@ scanf7CDdC$ Eval9@ resAbin7a$ val$ 8$ ,89@ if7resOA",9 printf7Cvalor Dd encontrado en >Dd?InC$ a>res?$ res9@ else printf7Cvalor no encontradoInC9@ F Ejercicios: ,- Dado un arre'lo de valores enteros$ crear un pro'rama 0ue los muestre de forma descendente a travs del mtodo de inserci)n 2 0ue permita buscar un valor 'uardado aplicando el mtodo lineal- /- %e tiene una lista de diez nombres- #rear un pro'rama 0ue los ordene de forma alfabtica$ 2 0ue adem5s conten'a una funci)n 0ue permita realizar la bs0ueda de un nombre en especKfico- 1- Dados dos arre'los vectores ! 2 B$ 4allar un arre'lo vector #$ donde cada uno de sus elementos es producto de la suma 2 resta de forma secuencial de sus valores7el primer elemento de # es producto de la suma de los dos primeros elementos de ! 2 B$ el se'undo de la resta$ 2 asK sucesivamente9- &ue'o$ se debe implementar un al'oritmo 0ue muestre de forma ordenadamente ascendente a0uellos valores del vector # 0ue sean menores 0ue un valor /M8- L- Editar palabra+ dada una palabra$ crear un pro'rama 0ue permita ubicar una letra dentro de ella dada su posici)n 2 cambiarla por otra letra$ aplicando el mtodo de bs0ueda binaria- E(emplo e una salida por pantalla+ *n'rese la palabra+ ilustraci)n &a ubicaci)n a cambiar+ P &etra sustituta+ p !4ora la palabra es+ ilustrapi)n M- %e tiene un re'istro con los si'uientes datos+ nombre$ edad$ cdula- #rear un pro'rama 0ue permita contener las si'uientes funciones+ *n'resar un re'istro- Buscar un re'istro por medio de la cdula- Mostrar la lista en orden alfabtico- %alir del re'istro- !l salir$ indicar la cantidad de personas 0ue fueron re'istradas-
Manual de Normas Internacionales de Control de Calidad Auditoria Revision Otros Encargos de Aseguramiento y Servicios Relacionados Edicion 2013 Parte I 0