Ir ao conteúdo

Posts recomendados

Postado
public static int BuscaBinariaRecursiva(int[] vetor, int valorBuscado, int inicio, int fim) {
		int i = (inicio + fim) / 2;

		if (inicio > fim) {
			return -1;
		} else if (valorBuscado == vetor[i]) {
			return i;
		} else if (valorBuscado < vetor[i]) {
			fim = i - 1;
			return BuscaBinariaRecursiva(vetor, valorBuscado, inicio, fim);
		} else {
			inicio = i + 1;
			return BuscaBinariaRecursiva(vetor, valorBuscado, inicio, fim);
		}

	}
}

 

Postado

Pode se basear por esse código, mas vai ter que adaptá-lo para usar no seu problema:

Spoiler

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char nome[256];
    int idade;
} Pessoa;


int buscaBinaria(Pessoa *pessoas, int quantidade, Pessoa novo);

int comparar(const void *a, const void *b);

void imprimir(Pessoa *pessoas, int quantidade);

int inserir(Pessoa *pessoas, int total, Pessoa novo);


int main() {
    const int total = 10;
    int quantidade = 0;
    int posicao = 0;

    Pessoa pessoas[total];

    for (int i = 0; i < total; ++i) {
        pessoas[i] = (Pessoa) {"", 0};
    }

    quantidade = inserir(pessoas, total, (Pessoa) {"B", 2});
    quantidade = inserir(pessoas, total, (Pessoa) {"A", 1});
    quantidade = inserir(pessoas, total, (Pessoa) {"E", 5});
    quantidade = inserir(pessoas, total, (Pessoa) {"D", 4});

    qsort(pessoas, quantidade, sizeof(Pessoa), comparar);
    imprimir(pessoas, quantidade);

    posicao = buscaBinaria(pessoas, quantidade, (Pessoa) {"Z", 26});
    printf("Posicao: %d \n", posicao);

    return EXIT_SUCCESS;
}


int buscaBinaria(Pessoa *pessoas, int quantidade, Pessoa novo) {
    int posicao = 0;

    for (posicao = 0; posicao < quantidade && comparar(&novo, &pessoas[posicao]) > 0; ++posicao);

    return posicao;
}

int comparar(const void *a, const void *b) {
    Pessoa *p1 = (Pessoa *) a;
    Pessoa *p2 = (Pessoa *) b;

    int resultado = strcmp(p1->nome, p2->nome);

    if (resultado == 0) {
        if (p1->idade > p2->idade) {
            resultado = 1;
        } else if (p1->idade < p2->idade) {
            resultado = -1;
        }
    }

    return resultado;
}

void imprimir(Pessoa *pessoas, int quantidade) {
    printf("[");

    for (int i = 0; i < quantidade; ++i) {
        printf("{%s, %d}", pessoas[i].nome, pessoas[i].idade);

        if (i + 1 < quantidade) {
            printf(", ");
        }
    }

    printf("] \n");
}

int inserir(Pessoa *pessoas, int total, Pessoa novo) {
    int inseriu = 0;
    int quantidade = 0;

    for (int i = 0; i < total && inseriu == 0; ++i) {
        if (strcmp(pessoas[i].nome, "") == 0 && pessoas[i].idade == 0) {
            pessoas[i] = novo;
            inseriu = 1;
        }

        quantidade += 1;
    }

    if (inseriu == 0) {
        fprintf(stderr, "[ E ]: O vetor esta cheio. \n");
    }

    return quantidade;
}

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!