Búsqueda – Secuencial

Enunciado

Sea un vector de n elementos únicos. Se quiere buscar un elemento k dado y conocer la posición en donde se encuentra, es decir, el índice correspondiente. En el caso de no hallarse el elemento en el vector, el procedimiento devuelve como posición un valor clave, no perteneciente al rango de valores de índices válidos y que sea interpretado como señal de dato no hallado.
El algoritmo de búsqueda secuencial recorre el vector desde la primera posición y compara cada elemento con el valor buscado k, mientras no lo encuentra ( v[ p ]<>k ) y el índice no va más allá del último elemento ( p<=n ) sigue el recorrido ( p = p + 1 ).
Apenas encuentre el valor sale del ciclo de iteración, es decir, interrumpe el recorrido y en parámetro variable p queda el valor del índice correspondiente al elemento hallado.
Si el elemento buscado no se encuentra en el vector este método implica recorrer todo el vector para detectar tal situación, en este caso p supera a n y a la salida del ciclo se asigna al parámetro variable p el valor señal.

Video: Búsqueda Secuencial

Código

Python

def Sequential ( v, k ):
    n = len( v )
    p = 0
    while p < n and v[p] != k:
        p += 1 
    if p == n:
        p = -1
    return p

def main ():
    n = 5
    v1 = []
    print( "Ingresar 5 numeros/Enter 5 numbers: " )
    for i in range( n ):
        v1.append( int( input( ) ) )
    print()
    while True:
        print( "Ingresar numero a buscar/", end="" )
        print( "Enter number to search: " )
        num = int( input( ) )
        p = Sequential( v1, num )
        if p!=-1:
            print( "\nIndice/Index: ",
                   p, "\n" )
        else:
            print( "\nNumero inexistente/", end="" )
            print( "Non-existent number\n" )
        print()
        print( "Presione S para salir, cualquier ",
                end="" )
        print( "tecla para nueva consulta" )
        print( "Press S to exit, any key ", end="" )
        print( "to new query\n" )
        r = input( ).upper()
        if r=="S": break
main()

C++

#include <iostream>
#include <iomanip>
using namespace std ;
#include <conio.h>

void Sequential( int n, float v[ ], float k, int* p )
{
  *p = 0 ;
   while ( *p < n && v [ *p ] != k )  
   	*p = *p + 1 ;
   if ( *p == n ) *p = -1 ;
}

int main()
{
   int  i, p, n=5 ;
   float v1[20], num ;
	
   cout << "Ingresar 5 numeros/Enter 5 numbers: " 
	<< endl ;
   for (i=0; i<n; i++)
	cin >> v1[i] ;
   cout << endl ;
   do
   {
	cout << "Ingresar numero a buscar/" ;
	cout << "Enter number to search: " ;
        cin >> num ;
        Sequential( n, v1, num, &p ) ;
        if ( p!=-1 )
            cout << endl << "Posicion/Position: " 
		 << p+1 << endl ;
        else
        {
            cout << endl << "Numero inexistente/" ;
	    cout << "Non-existent number" << endl ;
	}
        cout << endl ;
        cout << "Presione ESC para salir, cualquier " ;
	cout << "tecla para nueva consulta" << endl ;
        cout << "Press ESC to exit, " ;
        cout << "any key to new query" ;
        cout << endl ;
	} while( getch() != char (27) ) ;
   	
	return 0 ;
}

Pascal

Program Problema03 ;
uses CRT ;
const
    n = 5 ;
type
    dim = 0..12 ;
    vector = array [dim] of integer ;
    element = integer ;
var
    v1: vector ;
    num: element ;
    p, i: dim ;

Procedure Sequential( n:dim; var v:vector; 
		      k:element; var p:dim ) ;
begin
     p := 1 ;
     while ( p <= n ) and ( v[p] <> k ) do
           p := p + 1 ;

     if p>n then p:=0 ;
end ;

begin
    ClrScr ;
    writeln( 'Ingresar 5 numeros/Enter 5 numbers: ' ) ;
    for i:=1 to n do
    begin
         readln( v1[i]) ;
    end ; 
    writeln ;

    repeat
          write( 'Ingresar numero a buscar/' ) ;
          write( 'Enter number to search: ' ) ;
          readln(num) ;
          writeln ;
          Sequential( n, v1, num, p ) ;
          if p<>0
          then
              writeln( 'Posicion/Position: ', p )
          else
          begin
              write( 'Numero inexistente/' ) ;
              writeln( 'Non-existent number' ) ;
          end ;
          writeln ;
          write( 'Presione ESC para salir, ' ) ;
          write( 'cualquier tecla para ' ) ;
          writeln( 'nueva consulta' ) ;
          write( 'Press ESC to exit, ' ) ;
          writeln( 'any key to new query' ) ;
          writeln ;
    until readkey=#27 ;
end.

Diagramas