Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado

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
Postado

@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
Postado
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
Postado

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

 

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!