La búsqueda es una de las operaciones más importantes a la hora de realizar operaciones sobre cualquier estructura de datos. Podemos realizar la operación de búsqueda de dos maneras:
- Búsqueda lineal: en esto, simplemente iteramos a través de la estructura de datos (array) y buscamos el elemento dado en la array.
- Búsqueda binaria: en la búsqueda binaria, primero encontramos el elemento central de la array,
- Si el elemento de búsqueda es igual al elemento del medio, la operación de búsqueda termina aquí.
- Si el elemento de búsqueda es mayor que el elemento del medio, la estructura de datos se divide en dos partes y buscamos el elemento en la segunda mitad y nuevamente verificamos la relación relacional entre el elemento de búsqueda y el elemento del medio del subconjunto.
- Si el elemento de búsqueda es menor que el elemento del medio, entonces la array se divide en dos partes y buscamos el elemento en la primera mitad y nuevamente verificamos la relación relacional entre el elemento de búsqueda y el elemento del medio de la sub-array.
- No importa qué mitad seleccione para buscar el elemento, solo el elemento medio de ambas mitades se compara con el elemento de búsqueda y nuevamente verifica la relación relacional y divide la subarray en dos mitades en consecuencia. Este proceso continúa ya sea hasta que se encuentre el elemento de búsqueda o hasta que finalice la array.
En COBOL, para realizar estas operaciones de búsqueda, tenemos dos verbos, es decir, el verbo de búsqueda para la búsqueda lineal y el verbo de búsqueda en todos los verbos para la búsqueda binaria. En este artículo aprenderemos sobre el Verbo Buscar Todo.
Search-All Verb realiza una operación rápida y es más eficiente en comparación con Search Verb. En este caso, no hay necesidad de usar el verbo SET antes del verbo SEARCH ALL porque el verbo Search-All lo hace automáticamente. Hay algunas reglas que deben tenerse en cuenta antes de utilizar el verbo Buscar todo:
- La array debe estar ordenada, es decir, debe organizarse en orden ascendente o descendente.
- Este verbo solo se puede usar con la array unidimensional.
- No es necesario asignar el valor inicial a la clave antes de realizar la operación.
- Sólo comprueba la condición de igualdad.
- Si el elemento no se encuentra en la array, se ejecuta la declaración imperativa y, si no hay ninguna declaración imperativa, el control se pasa a la siguiente declaración.
Sintaxis:
SEARCH ALL table name [ AT END imperative statement ] WHEN condition-1 { imperative statement/NEXT SENTENCE } [END SEARCH].
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 SEARCHRNO PIC 99. 77 N PIC 99. 01 ARRAY. 02 ARR OCCURS 10 TIMES ASCENDING KEY IS RNO INDEXED BY I. 03 RNO PIC 99. PROCEDURE DIVISION. // AFTER ENTERING THE ELEMENTS IN ARRAY // WE SEARCH THE ROLL NUMBER ENTERED // BY USER IN VARIABLE SEARCHRNO. SEARCH ALL ARR AT END DISPLAY "NOT FOUND" WHEN RNO(I) = SEARCHRNO DISPLAY "FOUND". STOP RUN.
Producción:
- Para buscar el número de rollo en la array que está realmente disponible en la array.
- Para buscar el número de rollo en la array que no está disponible en la array.