【问题标题】:what is natural ordering when we talk about sorting?当我们谈论排序时,什么是自然排序?
【发布时间】:2011-07-07 06:40:41
【问题描述】:

什么是自然排序。假设我有一个 Employee 对象,其中包含姓名、年龄和加入日期,按什么自然排序排序?

【问题讨论】:

    标签: sorting language-agnostic


    【解决方案1】:

    对于包含数字的字符串,它表示1,2,3,4,5,6,7,8,9,10,11 而不是1,10,11,2,3,4,5,6,7,8,9

    【讨论】:

    • 所以这只是关于字符串?只有年龄和日期的对象没有自然顺序?
    • 日期通常被排序为字符串'yyyy-mm-dd'。在这种情况下,不需要“自然”排序,因为它已经完成了,因为小数字有前导零。
    • 另外,不同的语言有不同的排序规则或排序规则,所以自然顺序取决于。见Wikipedia
    【解决方案2】:

    自然排序是一种对人类来说很自然的字母数字排序。

    在经典的字母数字排序中,我们将有类似的内容:

    1 10 11 12 2 20 21 3 4 5 6 7
    

    如果您使用自然排序,它将是:

    1 2 3 4 5 6 7 10 11 12 20 21
    

    根据语言,自然排序有时会忽略大写字母和重音字母(即,所有重音字母都被视为非重音字母)。

    许多语言都具有自然排序字符串的功能。但是,Employee 对于语言来说太“高级”了,你必须决定对你来说自然排序并创建相应的函数意味着什么。

    在我看来,排序 Employee 将首先使用自然排序按姓名排序,然后是年龄,最后是加入日期。

    根据统计数据,有两种类型的分类变量。具有没有数字顺序的类别的变量(名义)和那些确实具有有序类别的变量(序数)。员工姓名、年龄和加入日期的示例实际上被视为名义变量,因此不能按自然顺序排序。例如,如果您将年龄分类为儿童、青少年、成人等级别,自然排序可能存在,在其中可以观察到升序排序。

    【讨论】:

    【解决方案3】:

    如果像我这样的人发现自己正在阅读以下文章:

    https://www.copterlabs.com/natural-sorting-in-mysql/

    (顺便说一句,这真的很有用),小心它,因为这是另一种排序方法。

    一个正确的自然排序算法规定您按字母顺序排序,但是当您遇到一个数字时,您会将该数字和所有后续数字作为单个字符进行排序。

    自然排序与先按字符串长度排序,然后在两个字符串长度相同时再按字母排序无关。虽然我链接的文章很有趣,但不要犯我犯的错误,认为这是自然排序的正确方法。

    【讨论】:

      【解决方案4】:

      对于Java来说,Comparable接口提供的排序称为自然排序,所以Comparator接口提供的,可以说是一种非自然排序。

      【讨论】:

        【解决方案5】:

        一个很老的问题,但很简单地说,Natural Order 是可比较元素的可枚举集合的升序

        • 号码:1, 2, 3...
        • 对于字符:A, B, C...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-10
          • 1970-01-01
          • 1970-01-01
          • 2018-11-11
          相关资源
          最近更新 更多