Ir ao conteúdo
  • Cadastre-se

Como ordenar uma matiz ? Em ordem decrescente


heliocleg2

Posts recomendados

Pessoal, Bom dia !

Seguinte, tenho uma matriz e preciso ordena-la em mais de um elemento POR LINHA dela :

1º Ordenar a coluna 4.

2º Ordenar coluna 3 dentre as linha que tenham o mesmo valor na coluna 4

3º Ordenar coluna 2 dentre as linha que tenham o mesmo valor na coluna 4 e coluna 3

4º Ordenar coluna 1 dentre as linha que tenham o mesmo valor na coluna 4 e coluna 3 e coluna 2

 

LIN   1      2      3      4

 1   24      2      0      0
  2   21      1      0      0
  3   20      2      0      0
  4   18      3      0      0
  5   26      1      1      0
  6   25      2      0      0
  7   30      1      0      0
  8   28      2      1      0
  9   25      3      0      0
 10   23      4      0      0
 11   22      5      0      0


 DEVE FICAR ASSIM :

LIN   1      2      3      4

 8   28      2      1      0
  5   26      1      1      0
 11   22      5      0      0
 10   23      4      0      0
  9   25      3      0      0
  4   18      3      0      0
  6   25      2      0      0
  1   24      2      0      0
  3   20      2      0      0
  7   30      1      0      0
  2   21      1      0      0

 

Meu código (em C) :

Este código funcionou para ordenar somente a 4 coluna :

//      ACERTOS[12][5] É A MATRIZ... A POSIÇÃO "0" CONTÉM O NUMERO DA LINHA 

      for (II=1; II<=11; II++)
         {
          ORDEM_CRESC[II]=ACERTOS[II][0];  // Transferência dos índices das linhas
          } 


    for (I=1; I<=10; I++)
      {
       for (II=I+1; II<=11; II++)
         {
          if (ACERTOS[4]<ACERTOS[II][4])
            {                               // Manejando somente os índices das linhas, pois os elementos não irão mudar de coluna
             AUX_X=ORDEM_CRESC[II];
             ORDEM_CRESC[II]=ORDEM_CRESC;
             ORDEM_CRESC=AUX_X;
             }
          } 

Quando incluí a ordenação da coluna 3, não funcionou...

//      ACERTOS[12][5] É A MATRIZ... A POSIÇÃO "0" CONTÉM O NUMERO DA LINHA 

       for (II=1; II<=11; II++)
         {
          ORDEM_CRESC[II]=ACERTOS[II][0];  // Transferência dos índices das linhas
          } 

 
    for (I=1; I<=10; I++)
      {
       for (II=I+1; II<=11; II++)
         {
          if (ACERTOS[4]<ACERTOS[II][4])
            {                               // Manejando somente os índices das linhas, pois os elementos não irão mudar de coluna
             AUX_X=ORDEM_CRESC[II];
             ORDEM_CRESC[II]=ORDEM_CRESC;
             ORDEM_CRESC=AUX_X;
             }
          else
            {
             if (ACERTOS[4]==ACERTOS[II][4])
               {
                if (ACERTOS[3]<ACERTOS[II][3])
                AUX_X=ORDEM_CRESC[II];
                ORDEM_CRESC[II]=ORDEM_CRESC;
                ORDEM_CRESC=AUX_X;
                }
             }
          } 

Abraços e Obrigado ! ! !

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

@heliocleg2    pelo exemplo que você deu não consegui entender o que fazer, será que você quer ordenar as quatro colunas em ordem decrescente ?  

experimente esse algoritmo :

#include <stdio.h>
#include <conio.h>
int i,j,k,aux;
int matriz [10][5];
int ordem(int x){
    for(i=0;i<9;i++){
        for(j=i+1;j<10;j++){
            aux=matriz[i][x];
            if( matriz[j][x] > matriz[i][x]){
                matriz[i][x] = matriz[j][x];
                matriz[j][x] = aux;
            }
        }
    }
    return 0;
}
void escrever(int w,int x,int y){
    if(y==0){if(i<9){printf("linha %d  -> ",w+1);}
    else{printf("linha %d -> ",w+1);}}
    printf("%d",matriz[w][x]);
    if(matriz[w][x]<10){printf("   ");}
    else {if(matriz[w][x]<100){printf("  ");}
    else{if(matriz[w][x]<1000){printf(" ");}}}
    printf("  ");
}
int main(){
    for(i=0;i<10;i++){
        printf("Digite O %d Numero Da 1 coluna ",i+1);
        scanf("%d",&matriz[i][0]);
        printf("Digite O %d Numero Da 2 coluna ",i+1);
        scanf("%d",&matriz[i][1]);
        printf("Digite O %d Numero Da 3 coluna ",i+1);
        scanf("%d",&matriz[i][2]);
        printf("Digite O %d Numero Da 4 coluna ",i+1);
        scanf("%d",&matriz[i][3]);
    }
    ordem(0);
    ordem(1);
    ordem(2);
    ordem(3);
    for(i=0;i<10;i++){
        for(j=0;j<3;j++){
            for(k=j+1;k<4;k++){
                aux=matriz[i][j] ;
                if( matriz[i][k] > matriz[i][j]){
                    matriz[i][j] = matriz[i][k] ;
                    matriz[i][k] = aux;
                }
            }
        }
    }
    printf("\ncolunas      1     2     3     4\n\n");
    for(i=0;i<10;i++){
        escrever(i,0,0);
        escrever(i,1,1);
        escrever(i,2,1);
        escrever(i,3,1);
        printf("\n");
    }
    getch();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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!