Fórum PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ordenação de matrizes em C/C#/C++

2 participantes

Ir para baixo

Ordenação de matrizes em C/C#/C++ Empty Ordenação de matrizes em C/C#/C++

Mensagem por Giovana Martins Sab 10 Jun 2017, 22:23

Elabore um algoritmo que leia e imprima uma matriz Mnxn com os elementos de suas linhas ordenados em ordem crescente.
Ordenação de matrizes em C/C#/C++ Screen31

Utilizando o código explícito na imagem, o programa roda normalmente, porém na parte: " Matriz M com os elementos..." se eu fizer uma pequena mudança como na parte em vermelho o programa roda, mas não dá certo.

for (i=1; i <= L; i++)
{
     for(j=1; j <= C; j++)
     {
           for (k=1; k < C; k++)
        {
        if (M[i][j] < M[i][j+1])
        {
        Aux=M[i][j+1];
        M[i][j+1]=M[i][j];
        M[i][j]=Aux;
        }
        }
    }
}

Assim, durante todo o desenvolvimento do código eu usei "for (i=1; i <= L; i++)" e "for (j=1; j <= C; j++)". Por que que no fim eu tenho que mudar a estrutura dos laços como foi feito na imagem?
Giovana Martins
Giovana Martins
Grande Mestre
Grande Mestre

Mensagens : 5537
Data de inscrição : 15/05/2015
Idade : 20
Localização : São Paulo

Ir para o topo Ir para baixo

Ordenação de matrizes em C/C#/C++ Empty Re: Ordenação de matrizes em C/C#/C++

Mensagem por xSoloDrop Ter 13 Jun 2017, 15:52

Supondo que sua matriz tenha n colunas, em bubble sort, você precisa percorrer cada linha n(n-1) vezes.
Observe o que acontece quando você coloca primeiro for(j=1; j <= C; j++) e depois for(k=1; k < C; k++) :
Spoiler:

Vamos supor que sua matriz tenha 3 linhas e 3 colunas.
i = 1, j = 1, k = 1. Análise dos elementos M[1][1] e M[1][2].
i = 1, j = 1, k = 2. Análise dos elementos M[1][1] e M[1][2].
i = 1, j = 2, k = 1. Análise dos elementos M[1][2] e M[1][3].
i = 1, j = 2, k = 2. Análise dos elementos M[1][2] e M[1][3].
i = 1, j = 3, k = 1. Não faz sentido essa linha, pois não há M[1][4].
i = 1, j = 3, k = 2. Não faz sentido essa linha, pois não há M[1][4].
i = 2, j = 1, k = 1. Análise dos elementos M[2][1] e M[2][1].
...
Percebeu algo? Você não analisou a primeira linha 3.2 = 6 vezes, mas sim passou apenas 1 vez por ela, comparando dois elementos duas vezes consecutivas.
Agora coloque primeiro for(k=1; k <= C; j++) e depois for(j=1; j < C; k++) e faça o mesmo raciocínio:
Spoiler:

i = 1, k = 1, j = 1. Análise dos elementos M[1][1] e M[1][2].
i = 1, k = 1, j = 2. Análise dos elementos M[1][2] e M[1][3].
i = 1, k = 2, j = 1. Análise dos elementos M[1][1] e M[1][2].
i = 1, k = 2, j = 2. Análise dos elementos M[1][2] e M[1][3].
i = 1, k = 3, j = 1. Análise dos elementos M[1][1] e M[1][2].
i = 1, k = 3, j = 2. Análise dos elementos M[1][2] e M[1][3].
i = 2, k = 1, j = 1. Análise dos elementos M[2][1] e M[2][2].
...
Pronto! O computador percorre cada linha 6 vezes!
xSoloDrop
xSoloDrop
Fera
Fera

Mensagens : 492
Data de inscrição : 23/03/2015
Idade : 23
Localização : Araçatuba SP

Ir para o topo Ir para baixo

Ordenação de matrizes em C/C#/C++ Empty Re: Ordenação de matrizes em C/C#/C++

Mensagem por Giovana Martins Ter 13 Jun 2017, 21:58

Entendido. Muito obrigada!
Giovana Martins
Giovana Martins
Grande Mestre
Grande Mestre

Mensagens : 5537
Data de inscrição : 15/05/2015
Idade : 20
Localização : São Paulo

Ir para o topo Ir para baixo

Ordenação de matrizes em C/C#/C++ Empty Re: Ordenação de matrizes em C/C#/C++

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissão neste fórum:
Você não pode responder aos tópicos