Ir ao conteúdo
  • Cadastre-se

C Ordenar matriz por determinada condição


carlos20030

Posts recomendados

Olá,

 

Eu tenho uma matriz de i linhas x 3 colunas de números inteiros. Por exemplo:

LINHA 0: 3 2 0

LINHA 1: 2 7 1

LINHA 2: 3 5 2

 

Eu gostaria de ajuda para ordenar essa matriz em ordem crescente da segunda coluna (em vermelho). Ficando assim ao final:

LINHA 0: 3 2 0

LINHA 1: 3 5 2

LINHA 2: 2 7 1

 

Se alguém puder pelo menos me clarear a ideia, eu planejo e código e já posto aqui para discutirmos a resolução.

Att.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@carlos20030 Se for um caso especifico de 3x3, você pode usar if e ir trocando a ordem, basta encontrar o maior dos 3, depois o médio e o menor.

Se for mais do que 3, você pode usar if, e ir na ordem de encontrar o menor, depois o segundo menor, etc, até preencher o ultimo com o maior.

Sem um código seu, só posso dar ideias...

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@carlos20030     como você vai ordenar uma colunas especifica dessa matriz então faça como se fosse ordenar um vetor simples, o melhor para isso é usar o método bubblesort , que você pode ver nesse site aqui :

https://codigofonte.uol.com.br/codigos/metodo-bolha-bubble-sort

faça o código e poste aqui para vermos como está e em que podemos ajudar .

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Olá, aqui está a base do código:

#include <stdio.h>

int main(){
	int matriz[3][3];
	int i, j, menorValor;
	
	/* Lendo a matriz */
	for(i = 0; i < 3; i++){
		for(j = 0; j < 3; j++){
			scanf("%d", matriz[i][j]);
		}
	}
	
	/* Ordenando as linhas de acordo com a ordem crescente da coluna 1 (ou 2 como no exemplo do topico) */
	menorValor = matriz[i][1];
		for(i = 0; i < 3; i++){
			if(matriz[i][1] < menorValor){
				menorValor = matriz[i][1];
				
			}
		}
	
	return 0;
}

Ainda estou travado no raciocinio, porque eu preciso pegar todas as informações da linha que contém a coluna com o menor valor e trocar com a outra linha (por isso não entendo como posso usar o bubble, pois eu preciso pegar todas as informações da linha).

 

Obs: fiz 3x3 como exemplo, a matriz pode ter várias linhas mas apenas 3 colunas.

Att.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@carlos20030    para ordenar com bubblesort você precisa usar dois loop um dentro do outro para testar o número e já trocar ele de posição caso seja necessário e não precisa ver o menor valor da linha já que você vai trocar é exatamente a linha e na mesma coluna .  então ali onde você colocou coluna 1 está certo , falta apenas o outro loop .   coloque o loop j indo de  i  + 1 enquanto for menor que 3 e faça do jeito do código daquele site .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 minutos atrás, devair1010 disse:

@carlos20030    para ordenar com bubblesort você precisa usar dois loop um dentro do outro para testar o número e já trocar ele de posição caso seja necessário e não precisa ver o menor valor da linha já que você vai trocar é exatamente a linha e na mesma coluna .  então ali onde você colocou coluna 1 está certo , falta apenas o outro loop .

Eu não estou conseguindo visualizar o que você diz :(

Veja, quando eu encontra o menor valor da coluna 1 de toda a matriz, eu tenho que levar todas as informações desta linha para o começo, e assim sucessivamente.

 

Ex: tenho duas linhas:

2 100 1

3   2   0

 

Observe que como "2" < "100", toda a linha que contém o 2 deve ir para o lugar da linha 100...

3   2   0

2 100 1

 

E assim sucessivamente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@carlos20030    entendi, então com aquele código você compara o número da linha com o outro e se for menor então você precisa usar uma variável auxiliar para pegar os número um por da linha e colocar na outra linha .

seu código ficaria assim :

#include <stdio.h>
int main(){
    int matriz[300][3];
    int i, j,n,k, menorValor,aux;
    printf("digite a quantidade de linhas ");
    scanf("%d",&n);
    /* Lendo a matriz */
    for(i = 0; i < n; i++){
        for(j = 0; j < 3; j++){
            printf("digite o %d numero da %d linha",j+1,i+1);
            scanf("%d",& matriz[i][j]);
        }
    }
    /* Ordenando as linhas de acordo com a ordem crescente da coluna 1 (ou 2 como no exemplo do topico) */
    menorValor = matriz[i][1];
    for(i = 0; i < n; i++){
        for(j=i+1;j<3;j++){
            if(matriz[i][1] > matriz[j][1]){
                for(k=0;k<n;k++){
                    aux=matriz[j][k];
                    matriz[j][k]=matriz[i][k];
                    matriz[i][k]=aux;
                }
            }
        }
    }
    printf("\n\n");
    for(i = 0; i < 3; i++){
        for(j = 0; j < 3; j++){
            printf("%d",matriz[i][j]);
        }
        printf("\n");
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...