【发布时间】:2010-12-05 16:43:34
【问题描述】:
如果您需要对项目列表进行排序,但编程语言不支持这种情况,那么执行此操作的好技术是什么?这是假设但值得一问。
谢谢
【问题讨论】:
-
这不是一个假设的问题:有些语言没有内置的排序项目列表的能力。
标签: algorithm language-agnostic sorting programming-languages
如果您需要对项目列表进行排序,但编程语言不支持这种情况,那么执行此操作的好技术是什么?这是假设但值得一问。
谢谢
【问题讨论】:
标签: algorithm language-agnostic sorting programming-languages
在 Wikipedia 上有非常详尽的报道:http://en.wikipedia.org/wiki/Sorting_algorithm
它有一长串常用算法,以及关于它们的优缺点的信息。
【讨论】:
问题的两个部分:
最适合字母排序的两种一般排序类型是:
比较排序更常见(部分是因为它们在排序方面更通用,部分是因为与固定宽度的基数排序相比,将基数排序应用于可变长度的字符串稍微有些繁琐)。有许多可供选择的权衡取舍,但都将两个项目的实际比较视为与排序算法分开的“黑匣子”。
所以剩下的功能是字典比较。比较两个字符串的方法是依次查看每个字符,直到找到它们不同的第一对,如果该字符为“less”,则左侧字符串为“less”。如果您没有发现差异,则要么字符串长度相同(在这种情况下它们相等),要么它们不是(在这种情况下较短的字符串是“less”)。
如果您的字符集是 ASCII,那么按字母顺序(区分大小写或不区分大小写)比较字符非常容易。如果您的字符集是完整的 unicode,那么您可能需要语言支持、第三方库或非常大的字符属性表才能获得所需的确切字母顺序。
【讨论】:
步骤与编写任何排序算法相同。创建比较函数。然后使用任何合适的排序算法,在大多数情况下是快速排序。对于比较功能,您必须为每个字母分配一个数值,然后按等级比较字母。这会给你一个字典排序,但我认为你的意思是这样。
【讨论】:
基本上,您的问题的答案是了解排序的工作原理。一个很好的参考是 Jonathan Shewchuk 的video lectures。
给三个小时,您就可以掌握基本知识。 :)
【讨论】:
使用Trie =)
【讨论】:
10,并且中位数中的每个节点都有一个 10 子节点,那么对于搜索字符串,您应该在 100 附近进行检查,但如果您通过 QS 之类的方式对其进行排序,可以用10check 搜索,搜索的复杂度没有Trie那么难。
网上有really good tool问这种问题
由于您还没有找到,这里是一个很好的起点:quicksort
【讨论】: