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); }
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); }