Czy można sortować tablice w porządku rosnącym / malejącym za pomocą dla pętli javascript?

Nauczyłem się JS przechodząc przez kilka pytań praktyki w podręczniku przed testem klasy.

Wszelkie wskazówki będą mile widziane!

a = Number(prompt("a:"));
b = Number(prompt("b:"));
c = Number(prompt("c:"));
d = Number(prompt("d:"));
e = Number(prompt("e:"));

// find largest element
var test = [a, b, c, d, e];
var biggest = -Infinity;
var biggest_index = -1; {
    for (i = 0; i < test.length; i++) {
        if (test[i] > biggest) {
            biggest = test[i];
            biggest_index = i;
        }
        else;
    }
    alert("The biggest element is " + biggest + " at index " + biggest_index);
}

// move largest element of array to the last index
test[test.length] = biggest;

// get rid of copy
test[biggest_index] = 0;
alert("Unsorted: " + test);

// shuffle ??
2
methuselah 24 październik 2011, 07:09

6 odpowiedzi

Najlepsza odpowiedź

Jeśli chcesz uzyskać numer max / min w tablicy, dlaczego nie używać Math.max/Math.min?

Jeśli chcesz posortować tablicę, można użyć metody sort:

var sorted = [3, 1, 6, 2].sort(); // sort ascending  
var sorted = [3, 1, 6, 2].sort(function(a, b){
    return b - a;
}); // sort descending 
3
wong2 24 październik 2011, 03:12

JavaScript ma funkcję sortowania do tablic.

Możesz to zrobić

alert("Sorted: "+ test.sort());
0
Icarus 24 październik 2011, 03:17

Jeśli szukasz skutecznego sposobu sortowania tablicy, najlepiej jest użyć Wbudowany metodę sort() .

Używanie go może być tak proste, jak:

var unsortedArray = [12, 55, 35, 11, 88, 13, 6];
var sortedArray = unsortedArray.sort();

Jeśli nie chcesz używać wbudowanej metody {x0}} z jakiegoś powodu (np. Edukacyjne cele), powinieneś wykonać badania dotyczące algorytmów sortowania.

Są to jedne z najpopularniejszych algorytmów sortowania:

0
John Slegers 29 luty 2016, 22:59

to dla b

function smallTobig(numbers) {

let A_B = []
    for(let i = 0; i < numbers.length; i++) {
     for(let j = i; j < numbers.length; j++) {
        if (numbers[i] > numbers[j]) {
            let temp = numbers[i];
            numbers[i] = numbers[j];
            numbers[j] = temp;
        }
    }
    A_B.push(numbers[i])
}
return A_B
}
console.log(smallTobig([5, 2, 1, 4])); 
console.log(smallTobig([999, 5, 0, 1, 4, 998])); 
console.log(smallTobig([15, 32, 11, 14]));
console.log(smallTobig([5, 4, 3, 2, 1, 0]));
console.log(smallTobig([123, 321, 143, 313]));

to dla b do a

function bigTosmall(numbers) {

let B_A = []
    for(let i = 0; i < numbers.length; i++) {
     for(let j = i; j < numbers.length; j++) {
        if (numbers[i] < numbers[j]) {
            let temp = numbers[i];
            numbers[i] = numbers[j];
            numbers[j] = temp;
        }
    }
    B_A.push(numbers[i])
}
return B_A
}
console.log(bigTosmall([5, 2, 1, 4])); 
console.log(bigTosmall([999, 5, 0, 1, 4, 998])); 
console.log(bigTosmall([15, 32, 11, 14]));
console.log(bigTosmall([5, 4, 3, 2, 1, 0]));
console.log(bigTosmall([123, 321, 143, 313]));
0
Fatah Banan Wijaya 22 listopad 2018, 11:00

Na pewno jest to możliwe. Najpierw należy zdecydować, który algorytm chcesz siłować. Zobacz tutaj kilka świetnych przykładów wizualnych http://www.sorting-algorithms.com/

Z twojego przykładu potrzebujesz innego dla pętli. Do tej pory znajdziesz największą, potrzebujesz kolejnej pętli, aby powtórzyć logikę, ale znajdziesz drugą największą niż trzecią, niż 4. itp.

1
Daryl 24 październik 2011, 03:14

Właściwie pracowałam na ręcznym sortowaniu tablic JavaScript z pętli już dziś. Podczas gdy poniższy kod zakłada, że karmisz to tablice (np. Nie sprawdza typów), tutaj był rozwiązanie, które udało mi się używać tylko za pomocą pętli for, nie ma wbudowanych metod sortowania i brak nowej tablicy kreacja:

Sortowanie największych

function sortGreatest(arr) {
  // manually sort array from largest to smallest:
  // loop forwards through array:
  for (let i = 0; i < arr.length; i++) {
    // loop through the array, moving forwards:
    // note in loop below we set `j = i` so we move on after finding greatest value:
    for (let j = i; j < arr.length; j++) {
      if (arr[i] < arr[j]) {
        let temp = arr[i]; // store original value for swapping
        arr[i] = arr[j]; // set original value position to greater value
        arr[j] = temp; // set greater value position to original value
      };
    };
  };
  return arr;
};

console.log(sortGreatest([10,9,1000,12,-11,3]));
// => [ 1000, 12, 10, 9, 3, -11 ]

Sortowanie przynajmniej do największych

function sortLeast(arr) {
  // manually sort array from smallest to largest:
  // loop through array backwards:
  for (let i = arr.length-1; i >= 0; i--) {
    // loop again through the array, moving backwards:
    for (let j = i; j >= 0; j--) {
      if (arr[i] < arr[j]) {
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      };
    };
  };
  return arr;
};
console.log(sortLeast([10,9,1000,12,-11,3]));
// => [ -11, 3, 9, 10, 12, 1000 ]
0
twknab 14 luty 2018, 19:23