сортировка массива int только с 3 элементами

У меня есть этот массив:

int [] myarray =  {17, 6, 8};

Каков оптимальный способ сортировки этого массива в псевдокоде?

Спасибо!


person clamp    schedule 25.01.2011    source источник
comment
sorted(a) с моей псевдофункцией sorted, которая сортирует на месте :)   -  person Felix Kling    schedule 25.01.2011
comment
Много дубликатов, например. stackoverflow.com/questions/3319993/   -  person Paul R    schedule 25.01.2011
comment
Легко: int [] myarray = {6, 8, 17}; :)   -  person Rafał Dowgird    schedule 25.01.2011


Ответы (4)


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

if (el1 > el2) Swap(el1,el2)
if (el2 > el3) Swap(el2,el3)
if (el1 > el2) Swap(el1,el2)
person nan    schedule 25.01.2011
comment
Ваша классическая сортировка пузырьком в развернутом виде :-) +1. - person paxdiablo; 25.01.2011

Этот код делает 2 или 3 сравнения и 4 записи в памяти в худшем случае, в отличие от другого ответа (всегда 3 сравнения и 9 записей в памяти в худшем случае).

if a[0] < a[1]:
    if a[1] > a[2]:
        if a[0] < a[2]:
            temp = a[1]
            a[1] = a[2]
            a[2] = temp
        else:
            temp = a[0]
            a[0] = a[2]
            a[2] = a[1]
            a[1] = temp
    else:
        # do nothing
else:
    if a[1] < a[2]:
        if a[0] < a[2]:
            temp = a[0]
            a[0] = a[1]
            a[1] = temp
        else:
            temp = a[0]
            a[0] = a[1]
            a[1] = a[2]
            a[2] = temp
    else:
        temp = a[0]
        a[0] = a[2]
        a[2] = temp
person adamax    schedule 25.01.2011
comment
Я дам тебе +1 за это, Адамакс. Хотя это неприятно читать, вопрос, который задавал, задавался оптимальным, и ваш, кажется, удовлетворяет этому :-) - person paxdiablo; 26.01.2011
comment
Ваш алгоритм дает неверный результат с массивом {2, 3, 1}. - person nitrocaster; 04.06.2016
comment
@ionree Конечно, я исправил код. Если вы посмотрите на исходный код, вы увидите, что путь выполнения заканчивается заменой двух элементов, в то время как каждый элемент имеет быть перемещенным. - person nitrocaster; 19.08.2017
comment
Небольшая оптимизация: замена первого сравнения < на =< позволит избежать ненужного обмена, если a[0]==a[1]`. - person James Bucanek; 17.12.2019

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

if (el1 > el2) Swap(el1, el2)
if (el2 > el3) {
   Swap(el2, el3)
   if (el1 > el2) Swap(el1, el2)
}
person Eric Grange    schedule 17.05.2013
comment
Не могу поверить, что кто-то проголосовал за это. Было -1. Я только что проголосовал за него, и теперь он на 0. - person Todd Lehman; 05.05.2015

Может на этом рисунке показано дерево решений для сортировки трех элементов. помогает: введите здесь описание изображения

person Michael Dorner    schedule 01.03.2014
comment
Из какой это книги? - person johncip; 30.04.2014
comment
Это из Grundlegende Algorithmen (www14.in.tum.de/~ga) от Volker Heun -- к сожалению, только на немецком языке. Очень похожий рисунок можно найти во Введении в алгоритмы Кормена и др. (mitpress.mit.edu /books/introduction-algorithms). - person Michael Dorner; 30.04.2014
comment
Я знал, что где-то видел это... возможно, это тоже есть в книге Седжвика? Но для всех, кому интересно, это действительно в CLRS, в разделе «Сортировка в линейном времени». Спасибо! - person johncip; 30.04.2014