Ответ 1
Я думаю, что это должно быть довольно быстро (по возрастанию):
if (el1 > el2) Swap(el1,el2)
if (el2 > el3) Swap(el2,el3)
if (el1 > el2) Swap(el1,el2)
У меня есть этот массив:
int [] myarray = {17, 6, 8};
Каков оптимальный способ сортировки этого массива в псевдокоде?
Спасибо!
Я думаю, что это должно быть довольно быстро (по возрастанию):
if (el1 > el2) Swap(el1,el2)
if (el2 > el3) Swap(el2,el3)
if (el1 > el2) Swap(el1,el2)
Этот код делает 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
Немного более эффективная версия, чем развернутая сортировка пузырьков, не оптимальная, но довольно простая
if (el1 > el2) Swap(el1, el2)
if (el2 > el3) {
Swap(el2, el3)
if (el1 > el2) Swap(el1, el2)
}
May этот рисунок, показывающий дерево решений для сортировки трех элементов: