сортировка массива int только с 3 элементами - PullRequest
12 голосов
/ 25 января 2011

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

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

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

Спасибо!

Ответы [ 4 ]

21 голосов
/ 25 января 2011

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

if (el1 > el2) Swap(el1,el2)
if (el2 > el3) Swap(el2,el3)
if (el1 > el2) Swap(el1,el2)
13 голосов
/ 25 января 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
8 голосов
/ 17 мая 2013

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

if (el1 > el2) Swap(el1, el2)
if (el2 > el3) {
   Swap(el2, el3)
   if (el1 > el2) Swap(el1, el2)
}
5 голосов
/ 01 марта 2014

Май этот график , показывающий дерево решений для сортировки трех элементов, помогает: enter image description here

...