Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
И если уж совсем заморочиться, то есть in-place bottom-up quicksort, которая обычно еще быстрее
Причём требование для сортировки такое: не использовать никаких промежуточных объектов, кроме одной переменной, каким бы медленным алгоритм ни был.
queue.Push(new Item());
for(;;){
for(;;){
temp=queue.Pop();
if(queue.Get()==Item.Empty) goto _1;
if(queue.Get()<=temp) break;
queue.Push(temp);
}
for(;;){
if(queue.Get()==Item.Empty){
queue.Push(temp);
queue.Push(queue.Pop());
break;
}
if(queue.Get()<temp) queue.Push(queue.Pop());
else{
queue.Push(temp);
temp=queue.Pop();
}
}
}
_1:
queue.Pop();def sort(q):
n = len(q)
for k in range(1,n): # start with 1, because 1 item is always sorted
# n-k items not sorted yet, then k items sorted
x = pop(q)
# n-k-1 not sorted yet, k sorted
for i in range(n-k-1):
roll(q)
# k sorted, n-k-1 not yet
pushed = False
for i in range(k):
y = pop(q)
if not pushed and x < y:
push(q, x)
pushed = True
push(q, y)
if not pushed:
push(q, x)
# k+1 sorted (including x), n-k-1 not yetdef sort(q):
n = len(q)
if n < 2:
return
retry = True
while retry:
retry = False
x = pop(q)
for i in range(n-1):
y = pop(q)
if x <= y:
push(q, x)
x = y
else:
push(q, y)
retry = True # reordered
push(q, x)
Сортировка очереди без использования дополнительных ресурсов