Как сортировать числа внутри несортированного массива?

const numbers= [4, 1, 3, 2];

Легкий! Мы можем отсортировать числа в массиве с помощью метода sort ().

const numbers = [4, 1, 3, 2];
numbers.sort();
console.log(numbers);
//expected output: Array [1, 2, 3, 4]

Метод sort () также может сортировать строки в алфавитном порядке!

const months = ["Banana", "Orange", "Apple", "Mango"];;
months.sort();
console.log(months);
//expected output: Array ["Apple", "Banana", "Mango", "Orange"]

Определение и использование

Метод sort () сортирует элементы массива. Он может сортировать как буквенные, так и числовые значения. По умолчанию метод sort () сортирует элементы в порядке возрастания (вверх).

Он может сортировать по возрастанию (вверх) или по убыванию (вниз).

Метод sort () хорошо работает со строками («яблоко» стоит перед «бананом»).

Однако, если мы будем отсортировать массив чисел, числа будут отсортированы путем преобразования их в строки. Метод sort () упорядочит их в коде UTF-16. И если числа отсортированы как строки, например, «25» будет больше «100», потому что «2» больше «1».

Из-за этого метод sort () неправильно упорядочивает значения по номерам. См. Код ниже:

const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort();
console.log(numbers)
//expected output: [ 1, 10, 100, 25, 40, 5 ]

Так! Как это исправить?

Что ж, мы можем использовать функцию под названием compareFunction:

function compareFunction(a, b) {
  return a - b;
}

Чтобы сортировка давала правильный результат в порядке номеров, мы должны поместить compareFunction внутри параметра метода sort ():

const numbers = [40, 100, 1, 5, 25, 10];
function compareFunction(a, b) {
   return a - b
}
numbers.sort(compareFunction);
//expected output: [ 1, 5, 10, 25, 40, 100 ]

Как видите, использование compareFunction в качестве функции обратного вызова внутри метода sort () может дать правильный результат.

Теперь вы знаете, как сортировать числа и алфавиты в порядке возрастания. Но ждать! Как сортировать товары по убыванию?

Легкий! Мы можем отсортировать элементы массива в порядке убывания, используя ту же функцию compareFunction, но на этот раз мы можем просто вычесть a из b. Нравится:

var numbers = [40, 100, 1, 5, 25, 10];
numbers.sort(function(a, b){return b - a});
console.log(numbers)

Источник: https://www.w3schools.com/jsref/jsref_sort.asp

Источник: https://www.w3schools.com/js/js_array_sort.asp

Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

Но ждать! Есть больше…

Что произойдет, если есть мир без метода sort () в javascript.

Как мы без него сортируем числа?

Что, если мы сможем сформулировать алгоритм сортировки чисел? Что, если мы сможем создать алгоритм и назвать его пузырьковой сортировкой?

Какие!? Вы можете спросить, что такое пузырьковая сортировка?

Пузырьковая сортировка - это простейший алгоритм сортировки, в котором соседние числа меняются местами в неправильном порядке.

Итак, допустим, у меня есть массив чисел [5, 1, 4, 2, 8].

Здесь алгоритм сравнит первые два элемента, и если первый элемент больше второго, он поменяется местами.

В массиве [5, 1, 4, 2, 8] алгоритм сравнит первые два числа, 5 и 1. 5 больше 1, поэтому он поменяется местами. 5 поменяются местами из 1, а 1 поменяется местами из 5.

Теперь массив будет выглядеть так: (5 1 4 2 8) - ›(1 5 4 2 8)

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

( 1 5 4 2 8 ) –> ( 1 4 5 2 8 )

Затем он сравнит следующие два числа:

( 1 4 5 2 8 ) –> ( 1 4 2 5 8 )

Затем следующее:

(1 4 2 5 8) - ›(1 4 2 5 8), поскольку 5 меньше, чем 8, он не поменяется местами.

Алгоритм будет продолжать менять номера местами, пока все не будет отсортировано.

(1 4 2 5 8) - ›(1 4 2 5 8)
(1 4 2 5 8) - ›(1 2 4 5 8), поменять местами с 4› 2
(1 2 4 5 8) - ›(1 2 4 5 8)
(1 2 4 5 8) - ›(1 2 4 5 8)

Посмотрите ниже, чтобы увидеть, как написать это в коде. Но спойлер! Лучше всего самостоятельно разобраться в собственном коде, прежде чем смотреть ниже:

//sort values without sort method;
function bubbleSort(array) {
   
  for(let i = 0; i < arr.length; i++) {
     for(let j = i + 1; j < arr.length; j++) {
        //check if previous value is greater than next value
        if(arr[i] > arr[j]) {
           //swap the values
           let temp = arr[a]; //store previous number
           arr[a] = arr[b]; //swap the next number to first number
           arr[b] = temp //swap the previous number to next number
        }
      }
   }
   
  return arr;
}
bubbleSort([1, 4, 2, 8, 345, 123, 43, 32, 5643, 63, 123, 43, 2, 55, 1, 234, 92]);
//expected output: [ 1, 1, 2, 2, 4, 8, 32, 43, 43, 55, 63, 92, 123, 123, 234, 345, 5643 ]

Существует множество других алгоритмов сортировки чисел, например Сортировка по выбору, Быстрая сортировка, Сортировка вставкой и Сортировка слиянием .

Вы можете искать их самостоятельно, если вам интересно.

Ресурс: https://www.geeksforgeeks.org/bubble-sort/