0
Good afternoon everyone, I would like to thank you first because you have already helped me a lot, but I need your strength again. I have a work in which I must use the ordering method Bucket Sort to sort the vectors that were and printed in ascending order.The vectors are divided into descending order and random order and these have size of 100(one hundred), 1000(one thousand), 10000(ten thousand) and 100000(one hundred thousand) numbers. The code does not accuse errors in the compiler but when running the part that would be of the functions it stops responding at the same time and the program stops running, I believe in the high of my energumenidade that is some problem with variables but do not know how to solve, and remembering that the code is not 100% finished but the error is unrelated, I believe. Thank you in advance. Obs.: was bugged when entering the code but I do not know how to fix, I’m sorry :/
#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;
}