Você está aqui: JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como ordenar os elementos de uma matriz de inteiros em ordem crescente ou decrescente usando o método sort() do objeto ArrayQuantidade de visualizações: 11251 vezes |
Em algumas situações precisamos ordenar os elementos de uma matriz de inteiros em ordem crescente ou decrescente. Para isso podemos usar o método sort() do objeto Array. Veja:
<html>
<head>
<title>Estudos JavaScript</title>
</head>
<body>
<script type="text/javascript">
// vamos criar um array contendo cinco elementos
var numeros = new Array(5, 3, 19, 21, 74);
// vamos exibir os elementos na ordem original
document.write('Elementos na ordem original:<br>');
for(var i = 0; i < numeros.length; i++){
document.write(numeros[i] + ' - ');
}
// vamos ordenar a matriz em ordem crescente
numeros.sort();
// vamos exibir os elementos em ordem crescente
document.write('<br><br>Elementos em ordem crescente:<br>');
for(var i = 0; i < numeros.length; i++){
document.write(numeros[i] + ' - ');
}
</script>
</body>
</html>
Porém, ao executarmos este código teremos uma surpresa. O resultado será: Elementos na ordem original: 5 - 3 - 19 - 21 - 74 - Elementos em ordem crescente: 19 - 21 - 3 - 5 - 74 - Isso aconteceu porque o método sort() sem nenhum argumento ordena a matriz em ordem crescente léxica, ou seja, levando em consideração o valor ASCII de cada caractere. Assim, o "1" em 19 faz com que este valor venha antes do 3 e do 5. Para contornar este problema só precisamos fornecer uma função personalizada à função sort(). Veja esta nova versão do código:
<script type="text/javascript">
// função personalizada usada no auxílio da ordenação de
// matrizes com valores numéricos
function comparar(a, b){
if(a < b)
return -1;
else if(a > b)
return 1;
else
return 0;
}
// vamos criar um array contendo cinco elementos
var numeros = new Array(5, 3, 19, 21, 74);
// vamos exibir os elementos na ordem original
document.write('Elementos na ordem original:<br>');
for(var i = 0; i < numeros.length; i++){
document.write(numeros[i] + ' - ');
}
// vamos ordenar a matriz em ordem crescente
numeros.sort(comparar);
// vamos exibir os elementos em ordem crescente
document.write('<br><br>Elementos em ordem crescente:<br>');
for(var i = 0; i < numeros.length; i++){
document.write(numeros[i] + ' - ');
}
</script>
Agora o resultado será: Elementos na ordem original: 5 - 3 - 19 - 21 - 74 - Elementos em ordem crescente: 3 - 5 - 19 - 21 - 74 - A função auxiliar fornecida ao método sort() do objeto Array pode ser qualquer uma, desde que possua dois parâmetros e retorne -1 se o primeiro argumento for menor que o segundo, 1 se o primeiro argumento for maior que o segundo e 0 (zero) se os argumentos forem iguais. Assim, se quisermos ordenar em ordem decrescente, só precisamos alterar a forma como estas comparações são feitas. Veja:
// função personalizada usada no auxílio da ordenação de
// matrizes com valores numéricos
function comparar(a, b){
if(a > b)
return -1;
else if(a < b)
return 1;
else
return 0;
}
Agora o resultado será: Elementos na ordem original: 5 - 3 - 19 - 21 - 74 - Elementos em ordem crescente: 74 - 21 - 19 - 5 - 3 Esta dica foi escrita e testada no Internet Explorer 8 e Firefox 3.6. |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de JavaScript |
Veja mais Dicas e truques de JavaScript |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




