Ir para conteúdo
Fórum Script Brasil
  • 0

Algoritimo de ordenamento


gdlm

Pergunta

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

Editado por gdlm
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...