如何在Python中输入数据时保留排序列表

时间:2016-08-24 21:06:49

标签: python list sorting asymptotic-complexity

我有一个列表列表,需要根据列表的长度进行排序。我现在正在做的是首先将列表插入主列表,然后对提供key=len的主列表进行排序。此步骤的总时间为n + nlg(n)。在将数据输入主列表时是否可以维护排序列表?可以使用bisect(或者有更好的方法)来完成它,如果是这样,它的表现会比n + nlg(n)更好吗?

1 个答案:

答案 0 :(得分:1)

这取决于您使用的数据结构:

  • Dynamic Array
    • 使用bisect
    • 在排序的数组上查找正确的索引为O(log n)
    • 插入O(n),因为您必须移动所有内容
    • 总计'O(n)
  • Linked List
    • 在已排序的链接列表中查找正确的索引需要浏览列表,直到到达目的地为止。 (O(n)
    • 插入是一项简单操作,仅需O(1)
    • 总计O(n)
  • Self-balancing BST
    • 在维持订单和余额时插入O(log n) 摊销
    • this question
    • 中有实施链接
  • Heap。不完全是您的要求,但根据您使用的实现,插入到堆中的是O(log n)Theta(1)。 python中的heapq是一个实现。您可以在堆中简单地推送项目,完成后,您可以在O(n)中获取排序结果。同时,您可以在O(1)中访问树的根,并在O(k)中访问最小的k,排序。