Buscar

Ordenação - Divisão e Conquista

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include<stdio.h>
#include <stdlib.h>
#define MAX 15
void fundiv (int valor[], int esquerdaI, int direitaF, int *soma); // //Prototico da função quickSort
//Corpo do programa
int main(){
	
	int valor[MAX], soma;	//[MAX] posicao (MAX Valor limitado do vetor)
	int esquerdaI = 0;		//esquerda primeira posicao 
	int direitaF = MAX - 1; //direita ultima posiçao
	
	/* gerando valores aleatórios entre zero e MAX */
 printf ("\n--------------------- ** Gerando %d Valores Aleatorios: ** ----------------------\n", MAX); //Numero de valores aleatorios a serem calculados
 	printf ("\n");
	printf ("Valores: ");	
	for (int cont = 0; cont < MAX; cont++){	//percorre o vetor
		valor[cont] = (rand () % 100 );		//Cria o vator em ordem randomica.
		printf("%d - ", valor[cont]);
	}
		
	fundiv(valor, esquerdaI, direitaF , &soma);	
	//passa para a função o valor, o valor inicial da esquerda "0", e o final da direita "MAX", chamando por parametro a variavel soma
	printf ("\n\n------------------------------------------------------------------------------------");
 printf ("\n--------------------- ** O Resultado total da soma = %d ** ---------------------\n", soma - valor[direitaF]);
	printf ("\n\n");
	printf ("				\t\t\t\t\tTrabalho de APA - Quest5\n\n");
	return 0;
}
//função de divisao e conquista
void fundiv (int valor[], int esquerdaI, int direitaF, int *soma){
	
	int soma1,soma2;
 if(direitaF - esquerdaI <= 1){
	 *soma= valor[esquerdaI] + valor[direitaF];
 	 return; 
 }
 
 fundiv (valor, esquerdaI, (esquerdaI + direitaF) / 2, &soma1); //primeiro soma a direita (div e conq)
 fundiv (valor, ((esquerdaI + direitaF) / 2) + 1, direitaF, &soma2); //soma a esquerda (div e conq)
 
	*soma = soma1 + soma2;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais