Array Ordering with Value Exchange

Asked

Viewed 76 times

4

Good Afternoon! I have assembled an array that receives 9 records from a single variable and the values are displayed on the user screen. However, when trying to put this matrix in ascending order, I tried to use the method of exchanging values, only when applying it to this algorithm, the last three values typed via keyboard were repeated three times:

var linha = Array(3,3);
var x, y, troca;
for (x = 0; x < 3; x++) {
  for (y = 0; y < 3; y++) {
      linha[x,y] = parseInt(prompt("Digite o "+[y+1]+"º número da "+[x+1]+"º coluna"));
  }
}
for (x = 0; x < 3; x++) {
  for (y = 0; y < 3; y++) {
    if (linha[x] < linha[y]){
      troca = linha[x];
      linha[x] = linha[y];
      linha[y] = troca;
    }
  }
}
for (x = 0; x < 3; x++) {
  for (y = 0; y < 3; y++) {
    document.write(linha[x,y]+"&nbsp&nbsp");
  }
  document.write("<br>");
}

Question: Which method would be simpler and logical to sort the 9 numbers typed by the user in ascending order in this presented problem? Esta figura apresenta o resultado que eu esperava aparecer na tela.

1 answer

4


What is happening is that the "Array(3,3)" command does not create a 9-position array, but rather a two-position array, with the index 0 => 3 and the index 1 => 3. In javascript, when using the Array function, each element passed by "," is considered an item. To solve this, you’ll do it this way:

// Função de comparação numérica básica, será utilizada
// para testar os números e saber qual é maior que qual
function sortNumber(a,b) {
    return a - b;
}

// Criar um Quadrado de quantos lados?
// Criei esta variável para caso queira aumentar as posições,
// basta informar aqui
var lados = 3;

// Será criado um array com 'n lados, depende da variável' mas, vazios.
var linha = new Array(lados * lados);

var x, y, troca;
for (x = 0; x < lados; x++) {
  for (y = 0; y < lados; y++) {
      // Utilizando o x * lados, vamos ter as seguintes posições
      // x = 0 e y = 0 === 0 - Posição 1 do Array
      // x = 0 e y = 1 === 1 - Posição 2 do Array
      // x = 0 e y = 2 === 2 - Posição 3 do Array
      // x = 1 e y = 0 === 3 - Posição 4 do Array
      // x = 1 e y = 1 === 4 - Posição 5 do Array
      // x = 1 e y = 2 === 5 - Posição 6 do Array
      // x = 2 e y = 0 === 6 - Posição 7 do Array
      // x = 2 e y = 1 === 7 - Posição 8 do Array
      // x = 2 e y = 2 === 8 - Posição 9 do Array       
      linha[(x * lados) + y] = parseInt(prompt("Digite o "+[y+1]+"º número da "+[x+1]+"º coluna"));
  }
}

// Removido esta parte, basta utilizar o comando SORT do Array passando uma função para ordenar.
// for (x = 0; x < 3; x++) {
//   for (y = 0; y < 3; y++) {
//     if (linha[x] < linha[y]){
//       troca = linha[x];
//       linha[x] = linha[y];
//       linha[y] = troca;
//     }
//   }
// }

// Vai ordenar os itens do array, passando como parâmetro a função que criamos
linha = linha.sort(sortNumber)

for (x = 0; x < lados; x++) {
  for (y = 0; y < lados; y++) {
    // Alterado a forma como acessar o índice do array.
    // Ficou x * lados + y para acessar de forma correta as posições
    document.write(linha[(x * lados) + y]+"&nbsp&nbsp");
  }
  document.write("<br>");
}

  • Thank you @Brunorigolon for your help and collaboration. This was a challenge I had to make and I was not managing to finish it and your contribution helped me understand it more. :-)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.