Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Mètodos de Ordenaciòn y bùsqueda

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
Busqueda Binaria
Busqueda Binaria
Wird geladen in …3
×

Hier ansehen

1 von 40 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie Mètodos de Ordenaciòn y bùsqueda (20)

Anzeige

Weitere von Facultad de Ciencias y Sistemas (20)

Aktuellste (20)

Anzeige

Mètodos de Ordenaciòn y bùsqueda

  1. 1. Introducción a la Programación. Tema: Búsqueda, ordenación y mezcla de arreglos Unidad II: Elementos de Programación .
  2. 2. 2.8 Definición de arreglos unidimensionales y bidimensionales. 2.9 Búsqueda, ordenación y mezcla de arreglos. 2.10 Estructura de datos. 2.11 Programación modular. 2.12 Definición de punteros. 2.13 Estructuras dinámicas. Unidad II: Elementos de Programación
  3. 3. Bibliografía Algoritmos computacionales. Introduccción al análisis y diseño. Editorial Addison Wesley. Tercera edición. 2002. Baase Sara, Van Gelder Allen. Capítulo 4. Página 149 – 151.
  4. 4. Bibliografía Cómo programar C/C++ y Java Introduccción al análisis y diseño. Editorial Pearson Prentice Hall Cuarta edición. 2004. Deitel. Deitel. Capítulo 6. Página 197.
  5. 5. Bibliografía Curso de programación C/C++ Fco. Javier Ceballos Sierra. Profesor titular de la Escuela Universitaria Politécnica Universidad de Alcalá de Henares. Editorial RA-MA. Páginas 492, 493, 495-498, 502, 503.
  6. 6. Bibliografía Fundamentos de Programación con el Lenguaje de Programación C++ Vicente Benjumea y Manuel Roldán 31 de mayo de 2017 UNIVERSIDAD DE MÁLAGA. Dpto. Lenguajes y CC. Computación E.T.S.I. Informática Páginas: 85-88, 90,
  7. 7. Búsqueda, ordenación y mezcla de arreglos. Los algoritmos para ordenar sirven para acomodar en orden los elementos de un conjunto. Ésto fue uno de los primeros problemas que se estudiaron intensamente en las ciencias de la computación. Muchas de las aplicaciones más conocidas del paradigma de diseño de algoritmos Divide y Vencerás son algoritmos de ordenamiento. Durante los años sesenta, cuando el procesamiento comercial de datos se automatizó en gran escala, el programa de ordenamiento era el que se ejecutaba con mayor frecuencia en muchas instalaciones de cómputo.
  8. 8. Búsqueda, ordenación y mezcla de arreglos. Hay varias razones para estudiar los algoritmos de ordenamiento. Entre ellas están: 1.Tienen utilidad práctica porque el ordenamiento es una actividad frecuente. 2.El trabajo con conjuntos grandes de datos en las computadoras se facilita si los datos están ordenados. 3.Se ha ideado una buena cantidad de algoritmos para ordenar, ya que es posible enfocar un problema dado desde muchos puntos de vista distintos.
  9. 9. Búsqueda, ordenación y mezcla de arreglos. Los algoritmos a estudiar se denominan ordenamientos internos porque se supone que los datos están en la memoria de acceso aleatorio de alta velocidad de la computadora. Los algoritmos para ordenar grandes conjuntos de datos almacenados en dispositivos de almacenamiento, con restricciones sobre la forma de acceder a los datos, se denominan ordenamientos externos.
  10. 10. Búsqueda, ordenación y mezcla de arreglos. Ejemplos: 1.Un banco ordena todos los cheques por número de cuenta, de manera que puede preparar los estados individuales del banco al final de cada mes. 2.Las empresas de telefonía ordenan sus listas de cuentas por apellido y, dentro de este ordenamiento, hacen otro por nombre para facilitar la búsqueda de números telefónicos. 3.Virtualmente todas las empresas deben ordenar algún tipo de dato y, en muchos casos, cantidades masivas de éstos.
  11. 11. Método de la burbuja: La idea de este algoritmo consiste en hacer repetidas pasadas sobre el array, trasladando en cada una, el elemento más pequeño hasta el principio del array. Este algoritmo se conoce como ordenación por el método de la burbuja, porque si se consideran los elementos como si estuviera en posición vertical y fueran burbujas con un cierto peso en un depósito de agua, dichas burbujas irían ascendiendo en función de su valor. Métodos de ordenación.
  12. 12. Métodos de ordenación. Método de la burbuja: 1. Comparamos el primer elemento con el segundo, el segundo con el tercero, el tercero con el cuarto, etc. Cuando el resultado de una comparación sea "mayor que'', se intercambian los valores de los elementos comparados. Con esto conseguimos llevar el valor mayor a la posición n. 2. Repetimos el punto 1, ahora para los n-1 primeros elementos de la lista. Con esto conseguimos llevar el valor mayor de éstos a la posición n-1. 3. Repetimos el punto 1, ahora para los n-2 primeros elementos de la lista, y así sucesivamente. 4. Se termina después de repetir el proceso descrito, n-1 veces, o cuando al finalizar la ejecución del iésimo proceso no haya habido ningún cambio.
  13. 13. Método de la burbuja: <función clasificar(array "a" de "n" elementos)> ["a" es un array cuyos elementos son as, a1, ..., an-1] n=n-1 DO WHILE ("a" no esté ordenado y n > 0 ) i= 1 DOWHILE(i<=n) IF(a[i-l]>a[i])THEN permutar a[i-1] con a[i] ENDIF i = i+1 ENDDO n=n-1 ENDDO END <clasificar> Métodos de ordenación.
  14. 14. Método de la burbuja: #include <iostream> using namespace std; #include <cstdlib> int const DIM = 10; typedef float tArray[DIM]; void rellenarArray(tArray); void ordenarArray(tArray); void mostrarArray(const tArray); Métodos de ordenación.
  15. 15. Método de la burbuja: int main() {tArray miArray; rellenarArray(miArray); ordenarArray(miArray); mostrarArray(miArray); system("PAUSE"); return 0;} void rellenarArray(tArray miArray){ cout << "Introduzca los 10 elementos del array" << endl; for (int i = 0; i < DIM; i++) { // Rellenamos las 10 posiciones del array cin >> miArray[i];}} Métodos de ordenación.
  16. 16. Método de la burbuja: void ordenarArray(tArray miArray){ float temporal; for (int i = 0;i < DIM; i++) {for (int j = 0; j< DIM-1; j++){ if (miArray[j] < miArray[j+1]) {/ * Ordena el array de mayor a menor, cambiar el "<" a ">" para ordenar de menor a mayor*/ temporal = miArray[j]; miArray[j] = miArray[j+1]; miArray[j+1] = temporal;}}}} Métodos de ordenación.
  17. 17. Método de la burbuja: void mostrarArray(const tArray miArray){ cout << "Mostrando array ordenado..." << endl; for (int i = 0; i < DIM; i++) // Imprime las 10 posiciones cout << miArray[i] << endl;} Métodos de ordenación.
  18. 18. Método de inserción: 1.Inicialmente, se ordenan los dos primeros elementos del array. 2.Luego se inserta el tercer elemento en la posición correcta con respecto a los dos primeros. 3.A continuación se inserta el cuarto elemento en la posición correcta con respecto a los tres primeros elementos ya clasificados. 4.Y así sucesivamente hasta llegar al último elemento del array. Métodos de ordenación.
  19. 19. Método de inserción: <función inserción(array "a" de "n" elementos)> ["a" es un array cuyos elementos son a0, a1, ..., an-1] i= 1 DOWHILE(i<n) x = a[i] insertar x en la posición correcta entre a0y ai ENDDO END <inserción> Métodos de ordenación.
  20. 20. Método de inserción: #include<iostream> #include"leearreglo.h" using namespace std; #define largo 50 void insercionDirecta(int A[],int n) { int i,j,v; for (i = 1; i < n; i++) { v = A[i]; j = i - 1; while (j >= 0 && A[j] > v) { A[j + 1] = A[j]; j--; } A[j + 1] = v; } } Métodos de ordenación.
  21. 21. Método de inserción: void main () { int A[largo],n; do{ cout<<"Cantidad de numeros a ingresar: ";cin>>n; if(n<=0||n>largo) cout<<"Debe ingresar un valor > a 0 y < a "<<largo<<endl; }while(n<=0||n>largo); leeCadena(n,A); insercionDirecta(A,n); muestraCadena(n,A);} Métodos de ordenación.
  22. 22. Método de inserción: #include<iostream> using namespace std; void leeCadena(int cant,int n[]) { int i; for(i=0;i<cant;i++) { cout<<"Ingresa numero "<<i+1<<": "; cin>>n[i]; } } Métodos de ordenación.
  23. 23. Método de inserción: void muestraCadena(int cant,int n[]) { int i; for(i=0;i<cant;i++) { cout<<n[i]<<endl; } } Métodos de ordenación.
  24. 24. Método quicksort: 1.Se selecciona un valor perteneciente al rango de valores del array. Este valor se puede escoger aleatoriamente o haciendo la media de un pequeño conjunto de valores tomados del array. El valor óptimo sería la mediana (el valor que es menor o igual que los valores correspondientes a la mitad de los elementos del array y mayor o igual que los valores correspondientes a la otra mitad). No obstante, incluso en el peor de los casos (el valor escogido está en un extremo), quicksort funciona correctamente. Métodos de ordenación.
  25. 25. Método quicksort: 2.Se divide el array en dos partes, una con todos los elementos menores que el valor seleccionado y otra con todos los elementos mayores o iguales. 3.Se repiten los puntos 1 y 2 para cada una de las partes en la que se ha dividido el array, hasta que esté ordenado, 4.El proceso descrito es esencialmente recursivo. Métodos de ordenación.
  26. 26. Mètodo quicksort <función qs(array "a" )> Se elige un valor x del array DO WHILE ( "a" no esté dividido en dos partes ) [dividir "a" en dos partes: a_inf y a_sup] a_inf con los elementos ai < x a_sup con los elementos ai>= x ENDDO IF ( existe a_inf ) THEN qs( a_inf ) ENDIF IF ( existe a_sup ) THEN qs( a_sup) ENDIF END <qs> Métodos de ordenación.
  27. 27. Wikibooks https://es.wikibooks.org/wiki/Programaci%C 3%B3n_en_C/Algoritmos_y_Estructuras_de _Datos Más información en enlaces.
  28. 28. Búsqueda lineal o secuencial: Este método de búsqueda, aunque válido, es el menos eficiente. Se basa en comparar el valor que se desea buscar con cada uno de los valores del array. El array no tiene por qué estar clasificado. Métodos de búsqueda.
  29. 29. Búsqueda lineal o secuencial: Consiste en ir recorriendo secuencialmente la colección de datos hasta encontrar el elemento buscado o, en última instancia, hasta recorrer la colección completa, en cuyo caso podemos estar seguros que el elemento buscado no se encuentra en la colección. La búsqueda lineal es adecuada como mecanismo de búsqueda general en colecciones de datos sin organización conocida. Métodos de búsqueda.
  30. 30. Búsqueda secuencial: clase Busqueda { privado caracter vec(6) publico cargar(caracter valor, entero i){ vec(i) = valor } publico entero secuencial (caracter x) { entero bandera = 0 entero indice = 0, i = 1 Mientras ((bandera == 0 ) O ( i <= 6)) si (vec (i ) == x) Entonces bandera = 1 indice = i Fin Si i = i + 1 Fin Mientras retornar indice}} Métodos de búsqueda.
  31. 31. Búsqueda secuencial: INICIO { caracter valores entero veces, resp Busqueda obj Para veces=1, veces, 1 Imprimir (“Teclee una letra:”) Leer (valores) obj.cargar (valores,veces) Fin Para Imprimir (“Introduzca el carácter a buscar:”) Leer (valores) resp= obj.secuencial (valores) Si (resp == 0) Entonces Imprimir (“No se encontro”, valores, “ en el vector”) De Otro Modo Imprimir (“El caracter” , valores , “ esta en la posición”, resp) Fin Si FIN Métodos de búsqueda.
  32. 32. Búsqueda secuencial: <función Búsqueda_S( array a, valor que queremos buscar)> i=0 DO WHILE ( no encontrado ) IF ( valor = a[i] ) encontrado ENDIF i = i+l ENDDO END <Búsqueda_S> Métodos de búsqueda.
  33. 33. Búsqueda secuencial: int buscar_alt(int x, const Vector& v) {int idx = int(v.size()); bool ok = false; for (int i = 0; (i < int(v.size())) && ! ok; ++i) { if (x == v[i]) { ok = true; idx = i;} } return idx;} Métodos de búsqueda.
  34. 34. Búsqueda secuencial: Como puede observarse, recorremos uno a uno todos los elementos hasta que podemos responder en sentido afirmativo o negativo. Respondemos en sentido negativo (el elemento no se encuentra) si el índice del siguiente elemento a probar está más allá del último elemento del array. Respondemos en sentido positivo si el elemento indicado por la variable i contiene el elemento buscado. En tal caso, acaba el bucle y se devuelve dicha posición i. Nótese que si el elemento no se encuentra se devuelve v.size(), que es una posición no válida del array. Métodos de búsqueda.
  35. 35. Búsqueda secuencial: La búsqueda secuencial es simple, pero requiere recorrer todo el array para estar seguros de que el elemento a buscar no se encuentra en la colección. Si el array tiene gran cantidad de elementos y necesitamos que las búsquedas se realicen de forma rápida, este mecanismo podría no ser adecuado. Si estamos interesados en acelerar el proceso de búsqueda, necesitamos información adicional que de pistas para poder realizar una implementación más eficiente. Necesitamos información acerca de la organización interna de los elementos en el array. Hay diferentes formas de organizar la información en el array que nos permiten implemementar algoritmos de búsqueda más eficientes. Métodos de búsqueda.
  36. 36. Búsqueda binaria: Un método eficiente de búsqueda, que puede aplicarse a los arrays clasificados, es la búsqueda binaria. Partiendo de que los elementos del array están almacenados en orden ascendente. Métodos de búsqueda.
  37. 37. Búsqueda binaria: La idea consiste en seleccionar un elemento de la colección y comprobar si se trata del elemento buscado. Si es así el proceso termina con éxito, pero si no, podemos aprovechar que sabemos que los elementos se encuentran ordenados y descartar todos los elementos que se encuentran a la derecha del mismo o a su izquierda (según la relación entre el valor seleccionado y el valor buscado). Este proceso se repite hasta encontrar el elemento o hasta que no queden elementos en la colección, en cuyo caso el elemento no habrá sido encontrado. Métodos de búsqueda.
  38. 38. Búsqueda binaria: 1. Se selecciona el elemento del centro o aproximadamente del centro del array. Si el valor a buscar no coincide con el elemento seleccionado y es mayor que él, se continúa la búsqueda en la segunda mitad del array. 2. Si, por el contrario, el valor a buscar es menor que el valor del elemento seleccionado, la búsqueda continúa en la primera mitad del array. En ambos casos, se halla de nuevo el elemento central, correspondiente al nuevo intervalo de búsqueda, repitiéndose el ciclo. 3. El proceso se repite hasta que se encuentra el valor a buscar, o bien hasta que el intervalo de búsqueda sea nulo, lo que indicará que el elemento buscado no está en el array. Métodos de búsqueda.
  39. 39. Búsqueda binaria: <función Búsqueda-B( array a, valor que queremos buscar )> DO WHILE ( exista un intervalo donde buscar ) x = elemento mitad del intervalo de búsqueda IF(valor=x)THEN encontrado ELSE IF(valor>x)THEN buscar "valor" en la segunda mitad del intervalo de búsqueda ENDIF IF(valor<x)THEN buscar "valor" en la primera mitad del intertalo de búsqueda ENDIF ENDIF ENDDO END <Búsqueda_B> Métodos de búsqueda.
  40. 40. Búsqueda binaria: /* busca la posición del primer elemento igual a x, si no se encuentra, retorna v.size()*/ unsigned buscar_bin(int x, const Vector& v) {unsigned i = 0 ; unsigned f = v.size() ; unsigned m = (i + f) / 2 ; while ((i < f) && (x != v[m])) { if (x < v[m]) {f = m ;} else {i = m + 1 ;} m = (i + f) / 2 ;} if (i >= f) {m = int(v.size());} return m; } Métodos de búsqueda.

×