Алгоритмы JavaScript: сортировка выбора

Предположим, у нас есть массив чисел, и мы хотим отсортировать его по размеру элемента.

У вас может быть массив объектов, и вы можете сравнивать свойства объекта, например, сортировку по возрасту или в алфавитном порядке по фамилии. Детали не меняются.

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

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

Как видите, алгоритм очень дорогой. Он не только выполняет итерацию по каждому элементу массива: для каждого элемента он снова выполняет итерацию по массиву.

Его сложностьO(n^2). Обратите внимание, что технически количество сравниваемых элементов становится меньше, но это ничего не значит с точки зрения общепринятых правил сложности.

Вот наша реализациясортировка по выбору.

const selectionSort = (originalList) => {
  //we first copy the array to avoid modifying the original array, since objects are passed by reference in JS
  const list = [...originalList]
  const len = list.length
  for (let i = 0; i < len; i++) {
    let min = i
    for (let j = i + 1; j < len; j++) {
      if (list[min] > list[j]) {
        min = j
      }
    }
    if (min !== i) {
      // a new minimum is found. Swap that with the current element
      ;[list[i], list[min]] = [list[min], list[i]]
    }
  }
  return list
}

const listOfNumbers = [1, 6, 3, 4, 5] console.log(selectionSort(listOfNumbers)) //[1,3,4,5,6]

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по js: