
		rai3mb
		
		(usa Outra)
		
		Enviado em 09/07/2011 - 16:21h 
		No caso do problema do nosso amigo acredito que usam algoritmo de busca bem aprimorado, como o método de pesquisa binária, peguei um livro da universidade com código em Pascal e adaptei para o shell, vejam um exemplo:
--------------------------
#!/bin/bash
BUSCA=$1
#Elementos
VALORES=(1 3 5 7 9 10 11 12 13 14 15 18 19 32 45 67 71 72 73 75 76 79 80 82 85 199 345 500 545 651 678 745 867 987 988 989 999)
INICIO=1
FINAL=$(echo "${#VALORES[@]}")
FINAL=$(($FINAL-1))
i=0
while [ $INICIO -le $FINAL ]
do
	MEIO=$((($INICIO+$FINAL)/2))
	if [ ${VALORES[$MEIO]} -eq $BUSCA ]; then
		echo 'achou'
		break;
	elif [ $BUSCA -gt ${VALORES[$MEIO]} ];then
		INICIO=$(($MEIO+1))
	else
		FINAL=$(($MEIO-1))
	fi
	i=$(($i+1))
done
echo "Quantidade de Elementos: ${#VALORES[@]}"
echo "Elemento que buscamos: $BUSCA"
echo "Quantidade de iterações: $i"
---------------------------------------------
Obs.: Os elementos devem está ordenados.
Agora vem um exemplo de resultado:
./buscaBinaria.sh 67
achou
Quantidade de Elementos: 37
Elemento que buscamos: 67
Quantidade de iterações: 3
Vejam que precisou de apenas 3 iterações, sendo que temos 37 elementos para buscar, então podemos imaginar que mesmo se tivermos milhões de registros, a busca será reduzida drasticamente, usando um método como esse.
Abraços