Python 排序列表或创建二叉搜索树并按顺序遍历是否更快?

Python 排序列表或创建二叉搜索树并按顺序遍历是否更快?,python,algorithm,sorting,binary-search-tree,Python,Algorithm,Sorting,Binary Search Tree,以下哪种方法更好 对元素列表进行排序,或 从一个列表创建一个二叉搜索树,然后创建另一个执行顺序遍历的列表 实际上,我所要做的就是有一个值列表,根据这些值的位置,给它们分配一个等级 假设我有一个列表: [33735, 0, 1368, 5400, 123, 2317, 43654, 243730] 我希望以排序的方式对值进行排序,然后分配秩。 我应该使用哪种方法?我认为在这种情况下,树有点过分了,除非您需要在维护列组的同时频繁更新集合。否则,您只需在排序列表中循环: l = [33735, 0,

以下哪种方法更好

  • 对元素列表进行排序,或
  • 从一个列表创建一个二叉搜索树,然后创建另一个执行顺序遍历的列表
  • 实际上,我所要做的就是有一个值列表,根据这些值的位置,给它们分配一个等级

    假设我有一个列表:

    [33735, 0, 1368, 5400, 123, 2317, 43654, 243730]
    
    我希望以排序的方式对值进行排序,然后分配秩。
    我应该使用哪种方法?

    我认为在这种情况下,树有点过分了,除非您需要在维护列组的同时频繁更新集合。否则,您只需在排序列表中循环:

    l = [33735, 0, 1368, 5400, 123, 2317, 43654, 243730]
    for rank, item in enumerate(sorted(l)):
        # do what you need
        print rank, item
    

    渐进地说,它们是一样的

    点#2本身实际上是一种排序算法,称为,具有
    O(n log n)
    最坏情况下的运行时间(假设我们使用的是a)

    任何基于比较的排序(大概是#1)也可以

    实际上,一个库排序函数(可能会使用类似于,或者命名为3)可能会更快(树排序涉及大量开销)(如果不是,一般来说,他们可能会用树排序替换该算法)


    当然,我假设数据没有什么特别之处,这可以使#1更快

    ,它在具有某些特征的不同类型的数据(通常是数字数据)上表现更好


    如果数据已经大致排序,将实际运行在
    O(n)

    哪个方法在您的测试中表现更好?可以使用二进制搜索访问python中的排序列表。现在我使用的是二叉树顺序遍历方法,它工作得很好。但我只是想知道,既然我最终得到了一个排序的列表,那么为什么不对列表进行排序并使用它呢?这个列表是通过每次访问某个页面时点击数据库创建的。如果结构根本没有被重用,构建BST毫无意义。那么您应该使用ORDERBY sql close或其等效工具,让DBMS为您处理排序。会快得多。谢谢你的澄清。。我想我宁愿使用第一种方法。