/**
* Pesquisa um numero x num array ordenado.É
* muito mais eficiente do que a pesquisa sequencial
* mas requer que os elementos do array estejam ordenados.
* Ele repetidamente divide a sequência em dois e em cada
* vez restringe a pesquisa à metade que contém o elemento.
*
* Este algoritmo corre no tempo O(log(n)) o que quer dizer que
* em média, o tempo de execução é proporcional ao logaritmo
* do número de elementos no array.
*
*
* @return o indice do numero x ou -1 se não encontrou
*/
public int binarySearch(int[] a, int x){
int low = 0;
int high = a.length;
while(low < high){
int i = (low + high) / 2;
if(a[i] == x){
return i;
}else if(a[i] < x){
low = i + 1;
}else{
high = i;
}
}
return -1;
}
/**
* Pesquisa sequencial (ou pesquisa linear) é o algoritmo
* de pesquisa mais simples mas também é o menos eficiente.
* Ele examina cada elemento sequencialmente começando
* pelo primeiro elemento até chegar ao fim do array(se
* eu estiver à procura de alguém num combóio, utilizo a
* pesquisa sequencial)
*
* Este algoritmo corre no tempo O(n) o que quer dizer que
* em média, o tempo de execução é proporcional ao número
* de elementos no array.
*
* @return o indice do elemento a pesquisar ou 0 se não
* o encontrar
*/
public int sequentialSearch(int[] a, int x){
for(int i = 0, n = a.length; i < n; i++){
if(a[i] == x){
return i;
}
}
return -1;
}
/**
* O algoritmo de binarysearch pode encontrar elementos rapidamente
* num array que já está ordenado o que sugere que devamos ter os
* elementos ordenados no array.No entanto, inserir novos elementos
* num array ordenado é difícil pois temos de transladar os elementos
* maiores para arranjar espaço para o novo elemento.Podemos faze-lo
* assim:
* @param a o array
* @param n o numero de elementos que já estão ordenados no array
* @param x o elemento a ser inserido no meio dos elementos
*/
void insert(int[] a, int n, int x){
/**PreCondicao: a[0] <= ... <= a[n-1], e n < a.length */
/**PosCondicao: a[0] <= ... <= a[n], e x está entre eles */
int i = 0;
while(i < n && a[i] <= x){
i++;
}
System.arraycopy(a, i, a, i+1, n-i);
a[i] = x;
}
Este artigo foi publicado em Junho 5, 2008 às 11:42 am, na(s) categoria(s) Java with tags algoritmos, Java. Pode seguir as respostas a esta entrada através do feed RSS 2.0
Pode deixar uma resposta ou fazer trackback do seu próprio site.
Março 18, 2009 às 5:03 pm
obrigado
ajudou bastante =]