14

Как отсортировать массив целых чисел?

14

Я пытаюсь получить максимальное и минимальное значения из массива, который, как я знаю, будет содержать только целые числа, но это оказывается сложнее, чем я думал.

Вот мой код:

var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray);

Я ожидал увидеть вывод 99, 104, 140000. Вместо этого я получаю 104, 140000, 99. Похоже, что функция сортировки обрабатывает значения как строки.

Есть ли способ заставить функцию сортировки сортировать по целочисленному значению каждого элемента массива?

5 ответ(ов)

2

Можно дополнить все вышеперечисленные ответы, выполненные в одну строку, следующим образом:

var numArray = [140000, 104, 99].sort(function (a, b) { return a - b; });

// результат: 99, 104, 140000

Этот способ позволяет сразу же отсортировать массив чисел без необходимости создавать промежуточную переменную.

0

Вместо того чтобы использовать просто .sort(), попробуйте использовать .sort((a, b) => a - b). Это гарантирует, что ваш массив будет отсортирован по числовому порядку. Также стоит отметить, что сортировка происходит "на месте", поэтому возвращаемое значение не имеет значения.

Вот пример кода:

var numArray = [140000, 104, 99];
numArray.sort((a, b) => a - b);
console.log(numArray);

В результате вы получите отсортированный массив: [99, 104, 140000].

0

Для сортировки массива по возрастанию используйте следующий код:

arr.sort((a, b) => a - b);

Для сортировки по убыванию используйте такой код:

arr.sort((a, b) => b - a);

А вот забавный факт: сортировку по убыванию можно получить, сначала отсортировав массив по возрастанию, а затем применив метод reverse():

arr.sort((a, b) => a - b).reverse();

Таким образом, вы можете использовать различные подходы в зависимости от ваших требований к сортировке.

0

Я согласен с aks, однако вместо использования

return a - b;

вам следует использовать

return a > b ? 1 : a < b ? -1 : 0;

Это позволит более явно указать результат сравнения, что может быть полезно в контексте функций сравнения, например, в сортировке.

0

На вопрос уже дан ответ, самый короткий способ - использовать метод sort(). Но если вы ищете больше способов сортировки своего массива чисел и любите циклы, обратите внимание на следующие варианты.

Сортировка вставками

По возрастанию:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length; i++) {
    var target = numArray[i];
    for (var j = i - 1; j >= 0 && (numArray[j] > target); j--) {
        numArray[j + 1] = numArray[j];
    }
    numArray[j + 1] = target;
}
console.log(numArray);

По убыванию:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length; i++) {
    var target = numArray[i];
    for (var j = i - 1; j >= 0 && (numArray[j] < target); j--) {
        numArray[j + 1] = numArray[j];
    }
    numArray[j + 1] = target;
}
console.log(numArray);

Сортировка выбором:

По возрастанию:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length - 1; i++) {
    var min = i;
    for (var j = i + 1; j < numArray.length; j++) {
        if (numArray[j] < numArray[min]) {
            min = j;
        }
    }
    if (min != i) {
        var target = numArray[i];
        numArray[i] = numArray[min];
        numArray[min] = target;
    }
}
console.log(numArray);

По убыванию:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length - 1; i++) {
    var min = i;
    for (var j = i + 1; j < numArray.length; j++) {
        if (numArray[j] > numArray[min]) {
            min = j;
        }
    }
    if (min != i) {
        var target = numArray[i];
        numArray[i] = numArray[min];
        numArray[min] = target;
    }
}
console.log(numArray);

Удачи с кодом!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь