Beispiel #1
0
        public static int[] pesquisaInterpolacao(string chave, List <Candidato> candidatos, TIPO tipo)
        {
            int[] result        = { 0, 0 };
            int   qtdComparacao = 0;

            int menor  = 0;
            int meio   = -1;
            int maior  = candidatos.Count - 1;
            int indice = -1;

            Candidato candidato = new Candidato(chave, Convert.ToInt64(chave), Convert.ToDouble(chave));

            while (menor <= maior)
            {
                qtdComparacao++;
                meio = encontrarMeio(chave, candidatos, tipo, menor, maior);

                if (CompararCandidatos.igual(candidatos[meio], candidato, tipo))
                {
                    indice = meio;
                    break;
                }
                else
                {
                    if (CompararCandidatos.menor(candidatos[meio], candidato, tipo))
                    {
                        menor = meio + 1;
                    }
                    else
                    {
                        maior = meio - 1;
                    }
                }
            }

            result[0] = indice;
            result[1] = qtdComparacao;
            return(result);
        }
Beispiel #2
0
        public static int[] pesquisaBinaria(String chave, List <Candidato> candidatosOrdenados, TIPO tipo)
        {
            int esq = 0;
            int dir = candidatosOrdenados.Count - 1;
            int valorMeio;

            int[] result        = { 0, 0 };
            int   qtdComparacao = 0;

            while (esq <= dir)
            {
                qtdComparacao++;

                valorMeio = esq + ((dir - esq) / 2);

                Candidato candidato = new Candidato(chave, Convert.ToInt64(chave), Convert.ToDouble(chave));
                if (CompararCandidatos.menor(candidatosOrdenados[valorMeio], candidato, tipo))
                {
                    esq = valorMeio + 1;
                }
                else if (CompararCandidatos.maior(candidatosOrdenados[valorMeio], candidato, tipo))
                {
                    dir = valorMeio - 1;
                }
                else
                {
                    result[0] = valorMeio;
                    result[1] = qtdComparacao;
                    return(result);
                }
            }

            result[0] = -1;
            result[1] = qtdComparacao;
            return(result);
        }