Jump to content
Fórum Script Brasil
  • 0

Algoritimo de ordenamento


gdlm
 Share

Question

Fala ai pessoal, estou com um problema , eu tenho um arquivo CSV do tipo

1 5

2 100

3 25

4 -9

5 0

Como façõ pra colocar em ordem crescente so o primeiro número 4,5,1,3,2 ? Eu não conseguir achar um jeito de implementar o Bubble Sort

att,

EDT: esse codigo ta dando Segmentation fault (core dumped)

#include <stdio.h>

int main(){
    int i,j;
    int temp,temp2;
    int res[25][2],vet[25];
    
    FILE * data;
    data = fopen("res.csv","r");

    for(i=0;i<10;i++){
    for(j=0;j<2;j++){
        fscanf(data,"%d",&res[i][j]);
    }
    }
    fclose(data);

    for(i=0;i<10;i++){
    temp=res[i][1];
    temp2=res[i+1][1];
    if(res[i+1][2] < res[i][2]){
        vet[i]=temp;
        vet[i+1]=temp2;
    }
    }

    for(i=0;i<10;i++){
    printf("%d   ,",vet[i]);
    }

    return 0;
}

Edited by gdlm
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Olá!

Existem alguns problemas com o seu código.

1) em C/C++, você deve acessar os itens de um vetor com o índice partindo de zero e não 1. Esse era o problema do Segmentation Fault.

2) No seu primeiro loop (leitura do arquivo) você sempre lê 10 linhas. Mas o arquivo tem apenas 5! Isso faz você inserir vários elementos inválidos no vetor res. O correto é identificar o final e parar a leitura, salvando o número de linhas lidas.

3) A ordenação bolha é feita no próprio vetor, não exige um vetor adicional. Assim, o vetor vet não é necessário.

Eu corrigi o seu código. Veja abaixo a resposta:

#include <stdio.h>

int main(){
    int i,j, final = 0, linhas, trocou;
    int temp,temp2;
    int res[25][2];
    
    FILE * data;
    data = fopen("res.csv","r");

    for(i=0;i<25 && !final;i++){
        for(j=0;j<2;j++){
            if(fscanf(data,"%d",&res[i][j]) != 1) {
                final = 1;
                break;
            }
        }
    }
    fclose(data);

    linhas = i-1;
    do {
        trocou = 0;
        for(i=0;i<linhas-1;i++){
            if(res[i+1][1] < res[i][1]){
                trocou = 1;
                temp =res[i][0];
                temp2=res[i][1];
                res[i  ][0] = res[i+1][0];
                res[i  ][1] = res[i+1][1];
                res[i+1][0] = temp;
                res[i+1][1] = temp2;
            }
        }
    } while(trocou);

    for(i=0;i<linhas;i++){
        printf("%d %d\n", res[i][0], res[i][1]);
    }

    return 0;
}

Se quiser que eu expllique o código, avise!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.7k
×
×
  • Create New...