domingo, 18 de novembro de 2012

Estrutura de dados: Algorítmos de Busca

Este código é uma classe Java que contém vários métodos de Busca:
  • Busca Linear 
  • Busca Linear Recursiva 
  • Busca Binária 
  • Busca Binária Recursiva 

public class Busca{
//Buscas Lineares
    //Busca Linear de Inteiros
    public int linear(int iVet[], int iNum){
        int i;
        for(i=0; i < iVet.length;i++){
            if(iVet[i] == iNum){
                return i;
            }
        }
        return -1;
    }
     
    //Busca Linear de Double      
    public int linear(double dVet[], double dNum){
        int i;
        for(i=0; i < dVet.length;i++){
            if(dVet[i] == dNum){
                return i;
            }
        }
        return -1;
    }
       
    //Busca Linear de Char
    public int linear(char cVet[], char cCarac){
        int i;
        for(i=0; i < cVet.length; i++){
            if(cVet[i] == cCarac){
                return i;
            }
        }
        return -1;
    }   

    //Busca Linear de String
    public int linear(String sVet[], String sPalavra){
        int i;
        for(i=0; i < sVet.length; i++){
            if (sVet[i].equalsIgnoreCase(sPalavra)){
                return i;
            }
        }
        return -1;
    }
       
//Buscas Lineares Recursivas
    //Busca Linear Recursiva de Inteiros
    public int linearRec(int iVet[], int iNum){
        return linearRec(iVet, iNum, 0);
    }

    public int linearRec(int iVet[], int iNum, int i){

        if (i >= iVet.length){
            return -1;
        }
        if (iVet[i] == iNum){
            return i;
        }
        return linearRec(iVet, iNum, i+1);
    }
  
    //Busca Linear Recursiva de Double
    public int linearRec(double dVet[], double dNum){
        return linearRec(dVet, dNum, 0);
    }

    public int linearRec(double dVet[], double dNum, int i){
        if (i >= dVet.length){
            return -1;
        }
        if (dVet[i] == dNum){
            return i;
        }
        return linearRec(dVet, dNum, i+1);
    }
       
    //Busca Linear Recursiva de Char
    public int linearRec(char cVet[], char cCarac){
        return linearRec(cVet, cCarac, 0);
    }

    public int linearRec(char cVet[], char cCarac, int i){
        if (i >= cVet.length){
            return -1;
        }
        if (cVet[i] == cCarac){
            return i;
        }
        return linearRec(cVet, cCarac, i+1);
    }  
       
    //Busca Linear Recursiva de String
    public int linearRec(String sVet[], String sPalavra){
        return linearRec(sVet, sPalavra, 0);
    }

    public int linearRec(String sVet[], String sPalavra, int i){
        if (i >= sVet.length){
            return -1;
        }
        if (sVet[i].equalsIgnoreCase(sPalavra)){
            return i;
        }
        return linearRec(sVet, sPalavra, i+1);
    } 
       
//Buscas Binárias
    //Busca Binária de Inteiros
    public int binaria(int iVet[], int iNum){
        int iIni = 0, iMeio, iFim = iVet.length-1;

        do{
            iMeio = (iIni + iFim)/2;
             
            if (iVet[iMeio] == iNum){
                return iMeio;
            }
            else if (iVet[iMeio] < iNum){
                iIni = iMeio + 1;
            }
            else {
                iFim = iMeio - 1;
            }

        }while (iIni <= iFim);
         
        return -1;
    }
       
    //Busca Binária de Double
    public int binaria(double dVet[], double dNum){
        int iIni=0, iMeio, iFim=dVet.length-1;

        do{
            iMeio = (iIni + iFim)/2;
            if (dVet[iMeio] == dNum){
                return iMeio;
            }
            else if(dVet[iMeio] < dNum){
                iIni = iMeio + 1;
            }
            else {
                iFim = iMeio - 1;
            }
        }while (iIni <= iFim);
         
        return -1;
    }
       
    //Busca Binária de Char
    public int binaria(char cVet[], char cCarac){

        int iIni=0, iMeio, iFim=cVet.length-1;

        do{
            iMeio = (iIni + iFim)/2;
             
            if (cVet[iMeio] == cCarac) {
                return iMeio;
            }
            else if (cVet[iMeio] < cCarac) {
                iIni = iMeio + 1;
            }
            else {
                iFim = iMeio - 1;
            }

        }while (iIni <= iFim);
         
        return -1;
    }   
       
    //Busca Binária de String
    public int binaria(String sVet[], String sPalavra){

        int iIni=0, iMeio, iFim=sVet.length-1;

        do{
            iMeio = (iIni + iFim)/2;
            if (sVet[iMeio].equalsIgnoreCase(sPalavra)){
                return iMeio;
            }
            else if (sVet[iMeio].compareToIgnoreCase(sPalavra)<0){
                iIni = iMeio + 1;
            }
            else{
                iFim = iMeio - 1;
            }

        }while (iIni <= iFim);
         
        return -1;
    }
     
//Buscas Binárias Recursivas   
    //Busca Binária Recursiva de Inteiros
    public int binariaRec(int iVet[], int iNum){
        return binariaRec(iVet, iNum, 0, iVet.length-1);
    }

    public int binariaRec(int iVet[], int iNum, int iIni, int iFim){
        int iMeio=(iIni + iFim)/2;

        if (iIni > iFim){
            return -1;
        }
        if (iVet[iMeio]==iNum){
            return iMeio;
        }
        if (iVet[iMeio] >iNum){ 
            return binariaRec(iVet, iNum, iIni, iMeio-1);
        }
        return binariaRec(iVet, iNum, iMeio+1, iFim);
    }

    //Busca Binária Recursiva de Double
    public int binariaRec(double dVet[], double dNum){
        return binariaRec(dVet, dNum, 0, dVet.length-1);
    }
       
    public int binariaRec(double dVet[], double dNum, int iIni, int iFim){
        int iMeio=(iIni + iFim)/2;

        if (iIni > iFim) {
            return -1;
        }
        if (dVet[iMeio]==dNum){
            return iMeio;
        }
        if (dVet[iMeio] >dNum) {
            return binariaRec(dVet, dNum, iIni, iMeio-1);
        }
        return binariaRec(dVet, dNum, iMeio+1, iFim);
    }

    //Busca Binária Recursiva de Char
    public int binariaRec(char cVet[], char cCarac){
        return binariaRec(cVet, cCarac, 0, cVet.length-1);
    }
       
    public int binariaRec(char cVet[], char cCarac, int iIni, int iFim){
        int iMeio=(iIni + iFim)/2;

        if (iIni > iFim){
            return -1;
        }
        if (cVet[iMeio]==cCarac){
            return iMeio;
        }
        if (cVet[iMeio] >cCarac) {
            return binariaRec(cVet, cCarac, iIni, iMeio-1);
        }
        return binariaRec(cVet, cCarac, iMeio+1, iFim);
    }
       
    //Busca Binária Recursiva de String
    public int binariaRec(String sVet[], String sPalavra){
        return binariaRec(sVet, sPalavra, 0, sVet.length-1);
    }
       
    public int binariaRec(String sVet[], String sPalavra, int iIni, int iFim){
        int iMeio=(iIni + iFim)/2;

        if (iIni > iFim) {
            return -1;
        }
        if (sVet[iMeio].equalsIgnoreCase(sPalavra)){
            return iMeio;
        }
        if (sVet[iMeio].compareToIgnoreCase(sPalavra)>0){
            return binariaRec(sVet, sPalavra, iIni, iMeio-1);
        }
        return binariaRec(sVet, sPalavra, iMeio+1, iFim);
    }
}

Nenhum comentário:

Postar um comentário