SlideShare una empresa de Scribd logo
1 de 3
Descargar para leer sin conexión
Algoritmos de búsqueda
Búsqueda lineal = Búsqueda secuencial
// Búsqueda lineal de un elemento en un vector
// - Devuelve la posición de “dato” en el vector
// - Si “dato” no está en el vector, devuelve -1

static int buscar (double vector[], double dato)
{
  int i;
  int N = vector.length;
  int pos = -1;

    for (i=0; i<N; i++)
        if (vector[i]==dato)
           pos = i;

    return pos;
}


Versión mejorada

// Búsqueda lineal de un elemento en un vector
// - Devuelve la posición de “dato” en el vector
// - Si “dato” no está en el vector, devuelve -1

static int buscar (double vector[], double dato)
{
  int i;
  int N = vector.length;
  int pos = -1;

    for (i=0; (i<N) && (pos==-1); i++)
        if (vector[i]==dato)
           pos = i;

    return pos;
}

Vectores y matrices - Java    - 17 -     © Fernando Berzal
Búsqueda binaria
Precondición
       El vector ha de estar ordenado


Algoritmo
       Se compara el dato buscado
       con el elemento en el centro del vector:
       - Si coinciden, hemos encontrado el dato buscado.
       - Si el dato es mayor que el elemento central del vector,
         tenemos que buscar el dato en segunda mitad del vector.
       - Si el dato es menor que el elemento central del vector,
         tenemos que buscar el dato en la primera mitad del
         vector.




Vectores y matrices - Java       - 18 -               © Fernando Berzal
// Búsqueda binaria de un elemento en un vector
// - Devuelve la posición de “dato” en el vector
// - Si “dato” no está en el vector, devuelve -1
// Implementación recursiva
// Uso: binSearch(vector,0,vector.length-1,dato)
static int binSearch
    (double v[], int izq, int der, double buscado)
{
  int centro = (izq+der)/2;

    if (izq>der)
       return -1;
    else if (buscado==v[centro])
       return centro;
    else if (buscado<v[centro])
       return binSearch(v, izq, centro-1, buscado);
    else
       return binSearch(v, centro+1, der, buscado);
}

// Implementación iterativa
// Uso: binSearch (vector, dato)
static int binSearch (double v[], double buscado)
{
  int izq = 0;
  int der = v.length-1;
  int centro = (izq+der)/2;
    while ((izq<=der) && (v[centro]!=buscado)) {
        if (buscado<v[centro])
           der = centro – 1;
        else
           izq = centro + 1;
        centro = (izq+der)/2;
    }
    if (izq>der)
        return -1;
    else
       return centro;
}

Vectores y matrices - Java   - 19 -       © Fernando Berzal

Más contenido relacionado

Destacado

La india powerpoint
La india powerpointLa india powerpoint
La india powerpointsirlims
 
Serebro Lab. Презентация компании Quality Villas.
Serebro Lab. Презентация компании Quality Villas.Serebro Lab. Презентация компании Quality Villas.
Serebro Lab. Презентация компании Quality Villas.Оксана Железнова
 
《48個真相,幫你找回醫療自主權》
《48個真相,幫你找回醫療自主權》《48個真相,幫你找回醫療自主權》
《48個真相,幫你找回醫療自主權》BOOKZONE
 
Importancia del conocimiento en la economía española 2014
Importancia del conocimiento en la economía española 2014Importancia del conocimiento en la economía española 2014
Importancia del conocimiento en la economía española 2014ABACO
 
《不用翻白眼,也能搞定職場天兵》
《不用翻白眼,也能搞定職場天兵》《不用翻白眼,也能搞定職場天兵》
《不用翻白眼,也能搞定職場天兵》BOOKZONE
 

Destacado (10)

Informefinaldip
InformefinaldipInformefinaldip
Informefinaldip
 
La india powerpoint
La india powerpointLa india powerpoint
La india powerpoint
 
Marco teorico
Marco teoricoMarco teorico
Marco teorico
 
equipo #6
equipo #6equipo #6
equipo #6
 
Las tics como ayuda empresarial
Las tics como ayuda empresarialLas tics como ayuda empresarial
Las tics como ayuda empresarial
 
Influenza h1 n1!!
Influenza h1 n1!!Influenza h1 n1!!
Influenza h1 n1!!
 
Serebro Lab. Презентация компании Quality Villas.
Serebro Lab. Презентация компании Quality Villas.Serebro Lab. Презентация компании Quality Villas.
Serebro Lab. Презентация компании Quality Villas.
 
《48個真相,幫你找回醫療自主權》
《48個真相,幫你找回醫療自主權》《48個真相,幫你找回醫療自主權》
《48個真相,幫你找回醫療自主權》
 
Importancia del conocimiento en la economía española 2014
Importancia del conocimiento en la economía española 2014Importancia del conocimiento en la economía española 2014
Importancia del conocimiento en la economía española 2014
 
《不用翻白眼,也能搞定職場天兵》
《不用翻白眼,也能搞定職場天兵》《不用翻白眼,也能搞定職場天兵》
《不用翻白眼,也能搞定職場天兵》
 

Más de Enrique Y Ch

52ejerciciosresueltosenpseudocodigo
52ejerciciosresueltosenpseudocodigo52ejerciciosresueltosenpseudocodigo
52ejerciciosresueltosenpseudocodigoEnrique Y Ch
 
Cronograma de trabajo
Cronograma de trabajoCronograma de trabajo
Cronograma de trabajoEnrique Y Ch
 
Analisis y diseño algoritmos
Analisis y diseño algoritmosAnalisis y diseño algoritmos
Analisis y diseño algoritmosEnrique Y Ch
 
Examen teorico inf 121(1)
Examen teorico inf 121(1)Examen teorico inf 121(1)
Examen teorico inf 121(1)Enrique Y Ch
 
Examen teorico inf 121
Examen teorico inf 121Examen teorico inf 121
Examen teorico inf 121Enrique Y Ch
 
Algoritmos y lenguajes de programación 9 junio final
Algoritmos y lenguajes de programación 9 junio finalAlgoritmos y lenguajes de programación 9 junio final
Algoritmos y lenguajes de programación 9 junio finalEnrique Y Ch
 

Más de Enrique Y Ch (8)

Tema 1
Tema 1Tema 1
Tema 1
 
52ejerciciosresueltosenpseudocodigo
52ejerciciosresueltosenpseudocodigo52ejerciciosresueltosenpseudocodigo
52ejerciciosresueltosenpseudocodigo
 
Cronograma de trabajo
Cronograma de trabajoCronograma de trabajo
Cronograma de trabajo
 
Analisis y diseño algoritmos
Analisis y diseño algoritmosAnalisis y diseño algoritmos
Analisis y diseño algoritmos
 
Examen teorico inf 121(1)
Examen teorico inf 121(1)Examen teorico inf 121(1)
Examen teorico inf 121(1)
 
Examen teorico inf 121
Examen teorico inf 121Examen teorico inf 121
Examen teorico inf 121
 
Practica
PracticaPractica
Practica
 
Algoritmos y lenguajes de programación 9 junio final
Algoritmos y lenguajes de programación 9 junio finalAlgoritmos y lenguajes de programación 9 junio final
Algoritmos y lenguajes de programación 9 junio final
 

Algoritmos de busqueda

  • 1. Algoritmos de búsqueda Búsqueda lineal = Búsqueda secuencial // Búsqueda lineal de un elemento en un vector // - Devuelve la posición de “dato” en el vector // - Si “dato” no está en el vector, devuelve -1 static int buscar (double vector[], double dato) { int i; int N = vector.length; int pos = -1; for (i=0; i<N; i++) if (vector[i]==dato) pos = i; return pos; } Versión mejorada // Búsqueda lineal de un elemento en un vector // - Devuelve la posición de “dato” en el vector // - Si “dato” no está en el vector, devuelve -1 static int buscar (double vector[], double dato) { int i; int N = vector.length; int pos = -1; for (i=0; (i<N) && (pos==-1); i++) if (vector[i]==dato) pos = i; return pos; } Vectores y matrices - Java - 17 - © Fernando Berzal
  • 2. Búsqueda binaria Precondición El vector ha de estar ordenado Algoritmo Se compara el dato buscado con el elemento en el centro del vector: - Si coinciden, hemos encontrado el dato buscado. - Si el dato es mayor que el elemento central del vector, tenemos que buscar el dato en segunda mitad del vector. - Si el dato es menor que el elemento central del vector, tenemos que buscar el dato en la primera mitad del vector. Vectores y matrices - Java - 18 - © Fernando Berzal
  • 3. // Búsqueda binaria de un elemento en un vector // - Devuelve la posición de “dato” en el vector // - Si “dato” no está en el vector, devuelve -1 // Implementación recursiva // Uso: binSearch(vector,0,vector.length-1,dato) static int binSearch (double v[], int izq, int der, double buscado) { int centro = (izq+der)/2; if (izq>der) return -1; else if (buscado==v[centro]) return centro; else if (buscado<v[centro]) return binSearch(v, izq, centro-1, buscado); else return binSearch(v, centro+1, der, buscado); } // Implementación iterativa // Uso: binSearch (vector, dato) static int binSearch (double v[], double buscado) { int izq = 0; int der = v.length-1; int centro = (izq+der)/2; while ((izq<=der) && (v[centro]!=buscado)) { if (buscado<v[centro]) der = centro – 1; else izq = centro + 1; centro = (izq+der)/2; } if (izq>der) return -1; else return centro; } Vectores y matrices - Java - 19 - © Fernando Berzal