Bucket Sort C help me

Asked

Viewed 32 times

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;
}
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.