Python, алгоритм динамической сортировки
Появилась необходимость создать алгоритм динамической сортировки (поочередно приходят числа, нужно выставлять их в ряд по возрастанию). Алгоритм обязан обладать следующими особенностями-
- Быть легко перестраиваемым при удалении элементов и внесении новых
- Обеспечивать быстрый поиск наименьшего значения
Пришел вот к такому алгоритму. Его суть похожа на дерево, только это не совсем дерево а цепочка. root'ом всегда является Node с наименьшим значением. Parent любого Node обладает значением большим, чем Node.
class Node:
def __init__(self, value, parent=None, child=None):
self.value = value
self.parent = parent
self.child = child
class Chain:
def __init__(self):
self.root = None
def add(self, val):
if not self.root:
self.root = Node(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if val > node.value:
if not node.parent:
node.parent = Node(val, child=node)
else:
if val <= node.parent.value:
node.parent = Node(val, child=node, parent=node.parent)
node.parent.parent.child = node.parent
else:
if node.parent.parent:
self._add(val, node.parent.parent)
else:
node.parent.parent = Node(val, child=node.parent)
else:
if node.child:
node.child = Node(val, child=node.child, parent=node)
else:
self.root = Node(val, parent=node)
node.child = self.root
def print_chain(self):
print('my_sort[', end='')
if self.root:
self._print_chain(self.root)
print(']', end='')
def _print_chain(self, node):
if node.parent:
print(f'{node.value}, ', end='')
self._print_chain(node.parent)
else:
print(f'{node.value}', end='')
От дерева отказался из за того, что его сложно перестраивать, то есть удалять элементы и вносить новые (если я ошибаюсь то поправьте пожалуйста). Получилось не очень здорово- проблемы с рекурсией если значений много. Скорость работы совсем не высокая. Я согласен расплатиться скоростью за возможность легко и быстро перестраивать цепочку- вносить новые элементы, удалять элементы, но не когда это настолько медленно. Возможно кто нибудь сможет посоветовать пути улучшения.