Pessoal boa tarde a todos, gostaria de agradecer antes pois já me ajudaram bastante, mas preciso da força de vocês novamente. Tenho um trabalho onde devo usar o método de ordenação bucket sort para ordenar os vetores que foram e impressos em ordem crescente.Os vetores são divididos em ordem decrescente e ordem aleatória e estes tem tamanho de 100(cem), 1000(mil), 10000(dez mil) e 100000(cem mil) números.O código não acusa erros no compilador mas na hora de rodar a parte que seria das funções ele deixa de responder na mesma hora e o programa para de ser executado, acredito eu no alto de minha energumenidade que seja algum problema com variáveis mas não sei como resolver, e lembrando que o código não está 100% terminado mas o erro não tem relação, acredito eu. Desde já agradeço.
#include <stdio.h>
#include <locale.h>
#include <cstdlib>
#include <stdlib.h>
#include <math.h>
#define TAM 10
struct bucket{
int qtd;
int *val;
};
void twogirlsonebucket(int *v, int n, int numbuckets);
void selectionsort(int *bc, int t);
void twogirlsonebucket(int* v, int n, int numbuckets){
int maior, menor, i, j, numbucket, pos;
struct bucket *bc;
maior=menor=v[0];
//buscador do maior e menor valor
for(i=1; i<n; i++){
if(v[i]> maior){
maior=v[i];
}
else if(v[i]<menor){
menor=v[i];
}
}
//para alocar os baldes no vetor utilizando a quantidade de baldes
bc = (struct bucket*) malloc(numbucket* sizeof bc);
//inicializando os baldes com quantidade zero
for(i=1; i<numbucket; i++){
bc[i].qtd = 0;
}
for(i=1; i<n; i++){
/*calculando a diferença do número atual com o menor número,
e dividindo pelo tamanho teremos a posição*/
pos=(v[i]-menor)/TAM;
/*as duas linhas a seguir tem a função de armazenar
os valores aleatóriamente nos baldes para depois serem devidamente armazenados*/
bc[pos].val[bc[pos].qtd] = v[i];
bc[pos].qtd++;
}
pos=0;
for(i=1; i<numbucket; i++){
/*utilizando o método de selection sort
para ordenar os números nos baldes*/
selectionsort(bc[i].val, bc[i].qtd);
for(j=0; j<bc[i].qtd; j++){
v[pos]=bc[i].val[j];
pos++;
}
}
free(bc);
}
void selectionsort(int* bc, int t){
int i, j, menor, troca;
t= TAM;
for(i=0; i<t-1; i++){
menor=i;
for(j=i+1; j<t; j++){
if(bc[i]<bc[menor]){
menor = j;
}
}
if(i!=menor){
troca=bc[i];
bc[i]=menor;
bc[menor]=troca;
}
}
}
int main() {
//VARIÁVEIS
int menu1T, menu2T, aux3, aux4, n, i ;
//ACENTUAÇÃO
setlocale(LC_ALL, "Portuguese");
printf("Ordenação bucket sort\n");
printf("1 - vetores decrescentes\n2 - vetores aleatórios\n");
scanf("%d",&menu1T);
aux3=0;
aux4=0;
FILE *f;
switch(menu1T){
case 1:
printf("1 - vetor 100\n2 - vetor 1000\n3 - vetor 10000\n4 - vetor 100000\n");
scanf("%d",&menu2T);
switch(menu2T){
case 1:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 100.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=100;
int numbuckets;
//para calcular a quantidade de baldes necessários
numbuckets =n/TAM;
int v[n];
for(i=0;i<n;i++){
fscanf(f,"%d ",&v[i]);
}
twogirlsonebucket (v, n, numbuckets);
for(i=0; i<n; i++){
printf("%d ",v[i]);
}
}
break;
case 2:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 1000.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=1000;
int v[n];}
break;
case 3:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 10000.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=10000;
int v[n];}
break;
case 4:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 100000.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=100000;
int v[n];}
break;
}
break;
case 2:
switch(menu2T){
case 1:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 100.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=100;
int v[n];}
break;
case 2:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 1000.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=1000;
int v[n];}
break;
case 3:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 10000.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=10000;
int v[n];}
break;
case 4:
f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 100000.txt","r");
if(f==NULL){
printf("Erro na abertura!\n");
}
else{
printf("Sucesso na abetura do arquivo\n");
}
{n=100000;
int v[n];}
break;
}
break;
}
//SAÍDA
return 0;
}