Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Как быстро отсортировать 3 элемента?

#алгоритм #сортировка #любой_язык


У меня есть три элемента (массив, не массив - не важно). Как мне их максимально быстро
и компактно отсортировать?

Например:

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 =;



Комментариев нет:

Отправить комментарий