#алгоритм #сортировка #любой_язык
У меня есть три элемента (массив, не массив - не важно). Как мне их максимально быстро и компактно отсортировать? Например: a = 7; b = 18; c = -3; Должно превратиться в: a = 18; b = 7; c = -3; Использовать "тяжелую" библиотечную сортировку (тот же QuickSort) для такого тривиального дела, кажется несколько накладно, да и не всегда под рукой есть готовая реализация (или не хочется тянуть зависимости в прогу). Приведите, пожалуйста, псевдо-код простой и компактной сортировки.
Ответы
Ответ 1
Один из самых простых и компактных вариантов - применить пузырьковую сортировку развернув все циклы: if (a > b) then Swap(a, b); if (b > c) then Swap(b, c); if (a > b) then Swap(a, b);Ответ 2
В дополнение к ответу @Kromster: Решение с тремя сравнениями — оптимальное. За меньшее количество сравнений отсортировать данные нельзя. Действительно, у трёх элементов возможно 3! = 6 вариантов перестановки, а за два сравнения у нас есть лишь 4 возможных исхода, следовательно, какие-то случаи будут обрабатываться одинаково. (Другой вариант того же доказательства: после сравнения первых двух элементов у нас есть три возможных места для третьего, и мы не можем выяснить, какое из них верное, при помощи всего лишь одного дополнительного сравнения.)Ответ 3
Вот прямо тут жмите выполнить код и сортируйте себе на здоровье :-)! function sortNums(a, b, c) { a = document.getElementById('a'); b = document.getElementById('b'); c = document.getElementById('c'); var arr = [a.value, b.value, c.value]; arr.sort(function(a, b) { return b - a; }); a.value = arr[0]; b.value = arr[1]; c.value = arr[2]; console.log(arr); }a =;
b =;
b =;
Комментариев нет:
Отправить комментарий