Ir ao conteúdo
  • Cadastre-se

Como ordenar uma matriz bi-dimensional ?


kira911

Posts recomendados

3 4 7

1 5 2

6 9 8

você quer que ordene linha por linha ou ordenar toda a matriz mesmo?

==================

3 4 7 ou 1 2 3

1 2 5 || 4 5 6

6 8 9 || 7 8 9

==================

Linha por linha estaria otimo ja. Mas se possivel me ensina como ordenar toda a matriz tambem ?

Cara muito obrigado, voce responde todos os meus topicos !

Quando eu pegar um conhecimento bom venho aqui ajudar os outros tambem !

Link para o comentário
Compartilhar em outros sites

Gostaria até de discutir isso com o Leonardo Bos e os outros amigos do fórum.

Minha (parca) lógica, me diz que um bom jeito para ordenar a matriz toda seria criar um vetor do mesmo tamanho da matriz, percorrer a matriz copiando os valores para esse novo vetor, ordenar o vetor utilizando algum algoritmo de sort e finalmente copiar tudo de volta para a matriz na ordem certa.

Acredito que deva existir algo menos trabalhoso, vocês conhecem? Abraço!

Link para o comentário
Compartilhar em outros sites

Olha só, eu analizei o algoritimo do bubble sort para vetor, e cheguei no seguinte codigo para matriz. O que esta errado ?


void bubble()
{
int i,j,i1,j1;
for (i=0;i<5;i++){
for (j=0;j<5;j++){
for (i1=i+1;i1<5;i1++){
for (j1=j;j1<5;j1++){
if (mat[i][j]>mat[i1][j1])
{
aux[1][1]=mat[i][j];
mat[i][j]=mat[i1][j1];
mat[i1][j1]=aux[1][1];
}

}
}
}
}
}

Gostaria até de discutir isso com o Leonardo Bos e os outros amigos do fórum.

Minha (parca) lógica, me diz que um bom jeito para ordenar a matriz toda seria criar um vetor do mesmo tamanho da matriz, percorrer a matriz copiando os valores para esse novo vetor, ordenar o vetor utilizando algum algoritmo de sort e finalmente copiar tudo de volta para a matriz na ordem certa.

Acredito que deva existir algo menos trabalhoso, vocês conhecem? Abraço!

Desse jeito eu consigo, mas meu professor da faculdade disse que teria a possibilidade de gerar algum erro desse jeito. Nao me lembro qual mas vou perguntar pra ele.

Link para o comentário
Compartilhar em outros sites

fabriciocarraro, exatamente o que eu proponho, é só ter uma função pra ordenar um único vetor, pois bem tenho estas funções que audarão nisso:


//usada pela outra função Ordenar
int Menor(int *vetor, bool *ja, int size)
{
int menor = 2147483647; //deve ser iniciado com o maior valor de 32 bits possível
int indice = -1;
for(int n = 0; n < size; n++)
{
if(vetor[n] < menor && ja[n] == false)
{
menor = vetor[n];
indice = n;
}
}
ja[indice] = true;
return indice;
}

// função que ordena os numeros, retorna um ponteiro para um vetor de numeros
// em ordem crescente
// parametros: vetor -- um vetor contendo alguns numeros
// size -- o tamanho desse vetor
int *Ordenar(int *vetor, int size)
{
bool *ja = new bool[size]; // os campos que ja foram utilizados

int *ordem = new int[size];

// para colocar false em todos os bools
for(int n = 0; n < size; n++)
{
ja[n] = false;
}

// loop principal da ordem
for(int n = 0; n < size; n++)
{
int menor = Menor(vetor, ja, size);
if(menor == -1)
{
break;
}
else
{
ordem[n] = vetor[menor];
}
}

delete [] ja; // deletar o ja, não será mais usado depois

return ordem;
}

a função Ordenar retorna um novo vetor contendo os valores na ordem crescente, para usá-la com matrizes basta criar um vetor com o tamanho da matriz e passar todos os valores da matriz para o vetor, aí é só jogar na "Ordenar(int *vetor, int size);"

Link para o comentário
Compartilhar em outros sites

Aqui está uma forma de passar uma matriz (vetor bidimensional) para um vetor unidimensional, basta apenas utilizar dois loops, um dentro do outro para que os valores possam ser atribuidos:

int main()
{
int matriz[3][3] = {
{5, 6, 2},
{1, 9, 7},
{4, 3, 8}
};

// loop para passar a matriz para um vetor
int *vetor = new int[9]; // 3 x 3 = 9

// passando a matriz para o vetor
int n = 0;
for(int l = 0; l < 3; l++)
{
// loop das linhas
for(int c = 0; c < 3; c++)
{
// loop das colunas
vetor[n] = matriz[l][c];
n++;
}
}

printf("o vetor: \n");
for(int n = 0; n < 9; n++)
{
printf("%i: %i\n", n, vetor[n]);
}

delete []vetor;
system("pause");
return 0;
}

dessa maneira é possível usar a função "int *Ordenar(int *vetor, int size)" para ordenar uma matriz :D

Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...

Bom foi nisso que pensei estou começando estudar analise !

 

public static void main(String[] args) {
    
        int mat[][]=new int[5][5];
        int a []=new int[25];
        int k,l,aux,i,j,num=0;
        int cont=1;
        Random gerador=new Random();
        
        for(k=0;k<25;k++){
            a[k]=gerador.nextInt(25);
        } 
        
        while(cont<25){
         for(k=0;k<25;k++){
             for(l=k+1;l<25;l++){
                 if(a[l]<a[k]){
                     aux=a[k];
                     a[k]=a[l];
                     a[l]=aux;
                     num=a[k];
                 }
             }
         }
         
        for(i=0;i<5;i++){
            for(j=0;j<5;j++){
                mat[j]=num;
                mat [j]=cont++;}
                
            }
        
            
        }
  for(i=0;i<5;i++){
      for(j=0;j<5;j++){
          System.out.printf(" %2d",mat[j]);
      }
      System.out.println();
  }
        
         
    }
         
    }
 

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!