【问题标题】:How to keep a sorted list while entering data into it in Python如何在 Python 中输入数据时保持排序列表
【发布时间】:2016-08-24 21:06:48
【问题描述】:
我有一个列表列表,需要根据列表的长度进行排序。我现在正在做的是首先将列表插入主列表,然后对主列表进行排序,给出key=len。此步骤将花费n + nlg(n) 的总时间。将数据输入主列表时是否可以维护排序列表?可以使用 bisect 来完成(或者有更好的方法)吗?如果可以,它的性能会比n + nlg(n) 更好吗?
【问题讨论】:
标签:
python
list
sorting
asymptotic-complexity
【解决方案1】:
这取决于您使用的数据结构:
-
Dynamic Array
- 在已排序的数组上找到正确的索引是
O(log n) 使用平分法
- 插入是
O(n),因为您必须转移所有内容
- 总计 `O(n)
-
Linked List
- 在已排序的链表上查找正确的索引需要浏览该列表直到到达那里。 (
O(n))
- 插入是一个简单的操作,只需要
O(1)。
- 总计
O(n)
-
Self-balancing BST
-
Heap。不完全是您所要求的,但根据您使用的实现,插入堆是
O(log n) 或Theta(1)。 python 中的heapq 是一种实现。您只需将项目推送到堆中,完成后即可在O(n) 中获得排序结果。同时,您可以在O(1) 中访问树的根,在O(k) 中访问最小的、已排序的k。