【问题标题】:Sorting a list of items by alphabetical order when the language has no function to do so?当语言没有功能时按字母顺序对项目列表进行排序?
【发布时间】:2010-12-05 16:43:34
【问题描述】:

如果您需要对项目列表进行排序,但编程语言不支持这种情况,那么执行此操作的好技术是什么?这是假设但值得一问。

谢谢

【问题讨论】:

  • 这不是一个假设的问题:有些语言没有内置的排序项目列表的能力。

标签: algorithm language-agnostic sorting programming-languages


【解决方案1】:

在 Wikipedia 上有非常详尽的报道:http://en.wikipedia.org/wiki/Sorting_algorithm

它有一长串常用算法,以及关于它们的优缺点的信息。

【讨论】:

    【解决方案2】:

    问题的两个部分:

    • 如何排序
    • 如何将此应用于一般的字母排序(也称为字典排序)。

    最适合字母排序的两种一般排序类型是:

    比较排序更常见(部分是因为它们在排序方面更通用,部分是因为与固定宽度的基数排序相比,将基数排序应用于可变长度的字符串稍微有些繁琐)。有许多可供选择的权衡取舍,但都将两个项目的实际比较视为与排序算法分开的“黑匣子”。

    所以剩下的功能是字典比较。比较两个字符串的方法是依次查看每个字符,直到找到它们不同的第一对,如果该字符为“less”,则左侧字符串为“less”。如果您没有发现差异,则要么字符串长度相同(在这种情况下它们相等),要么它们不是(在这种情况下较短的字符串是“less”)。

    如果您的字符集是 ASCII,那么按字母顺序(区分大小写或不区分大小写)比较字符非常容易。如果您的字符集是完整的 unicode,那么您可能需要语言支持、第三方库或非常大的字符属性表才能获得所需的确切字母顺序。

    【讨论】:

      【解决方案3】:

      步骤与编写任何排序算法相同。创建比较函数。然后使用任何合适的排序算法,在大多数情况下是快速排序。对于比较功能,您必须为每个字母分配一个数值,然后按等级比较字母。这会给你一个字典排序,但我认为你的意思是这样。

      【讨论】:

        【解决方案4】:

        基本上,您的问题的答案是了解排序的工作原理。一个很好的参考是 Jonathan Shewchuk 的video lectures

        给三个小时,您就可以掌握基本知识。 :)

        【讨论】:

          【解决方案5】:

          使用Trie =)

          【讨论】:

          • 我没有对你投反对票,但 Trie 在大数据中很有用,用于最小化数据大小,找到一些字符串最好对它们进行排序,即你有一个包含 1000 个项目的列表,每个字符串长度至少为 10,您的 Trie 的深度为 10,并且中位数中的每个节点都有一个 10 子节点,那么对于搜索字符串,您应该在 100 附近进行检查,但如果您通过 QS 之类的方式对其进行排序,可以用10check 搜索,搜索的复杂度没有Trie那么难。
          【解决方案6】:

          网上有really good tool问这种问题

          由于您还没有找到,这里是一个很好的起点:quicksort

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-13
            • 2013-05-02
            • 2014-02-08
            • 1970-01-01
            • 2022-01-18
            • 2021-10-10
            • 1970-01-01
            相关资源
            最近更新 更多