Bom, estou tentando fazer um programa que execute o algoritmo de ordenação merge-sort em paralelo usando os varios processadores de uma computador multiprocessado usando thread.
O programa funciona em duas etapas, a parte em que ele divide o vetor e a segunda (onde ocorre o uso de threads), que ordena os pedaços usando thread. Os codigos são esse:
Divisao do vetor e chamada da função que ordena os vetores
Pergunta
DukaCc
Bom, estou tentando fazer um programa que execute o algoritmo de ordenação merge-sort em paralelo usando os varios processadores de uma computador multiprocessado usando thread.
O programa funciona em duas etapas, a parte em que ele divide o vetor e a segunda (onde ocorre o uso de threads), que ordena os pedaços usando thread. Os codigos são esse:
Divisao do vetor e chamada da função que ordena os vetores
void m_sortT(int vet[], int esq, int dir){ pthread_t *t = malloc(sizeof(pthread_t)); param *arg = malloc (sizeof(param)); arg->vet = vet; arg->esq = esq; arg->dir = dir; if (arg->dir > arg->esq) { arg->meio=(arg->dir + arg->esq)/ 2; m_sortT(arg->vet, arg->esq, arg->meio); m_sortT(arg->vet, arg->meio+1, arg->dir); pthread_create(t, NULL, mergeT, (void *) arg); } }Ordenação dos vetor:void *mergeT(void *arg) { param *p = (param *) arg; //p = (param *) malloc (sizeof(param)); int i,esq_fim,num_elementos,aux_pos; int *aux; int *vetor; aux =(int *) malloc(sizeof(int) * p->dir); vetor = p->vet; esq_fim = (p->meio)-1; aux_pos = p->esq; num_elementos = (p->dir) - (p->esq) + 1; while ((p->esq <= esq_fim)&&(p->meio <= p->dir)) { if (p->vet[p->esq] <= p->vet[p->meio]) { aux[aux_pos] = p->vet[p->esq]; aux_pos = (aux_pos) + 1; p->esq = (p->esq) + 1; } else { aux[aux_pos] = p->vet[p->meio]; aux_pos = aux_pos + 1; p->meio = (p->meio) + 1; } } while (p->esq <= esq_fim) { aux[aux_pos] = p->vet[p->esq]; p->esq = (p->esq) + 1; aux_pos = aux_pos+1; } while (p->meio <= p->dir) { aux[aux_pos] = p->vet[p->meio]; p->meio = (p->meio) + 1; aux_pos = aux_pos+1; } for (i=0;i<num_elementos;i++) { p->vet[p->dir] = aux[p->dir]; p->dir = (p->dir) - 1; } }Estou passando como parametro um vetor de 10 posições vet[] = {10,9,8,7,6,5,4,3,2,1}
alguém saberia me dizer onde estou errado?? Muito obrigado.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.