c - 在 C 中按字母顺序对一长串单词进行排序的最佳方法是什么?

标签 c alphabetical-sort

正如标题所示,我需要按字母顺序订购相当多(数十万)个字符串。我有几个链接列表,每个链接列表都包含特定长度的单词。也就是说,我有一个 6 个字母的字符串列表、7 个字母的字符串列表、...、10 个字母的字符串列表。

我正在考虑使用基数排序,但我想看看是否有更好的选择,因为在按字母顺序排列所有单词长度相同的列表时我找不到任何具体内容。

编辑:

我有一个非常长的单词列表,其大小非常大。我目前正在浏览列表并将单词按大小类别排列。也就是说,当我遇到长度为 6 的单词时,它会进入“6-length”列表。当我对每个单词执行此操作时,我实际上是在创建一个新单词对象,其中包含原始单词及其按字母顺序排列的版本(例如 stack、ackst)。我想按字母顺序排列每个“长度”列表,以便我可以轻松找到字谜词并将其分组。

最佳答案

我认为长度相同这一事实对于排序来说并不重要,是吗?您没有解释您认为这会如何影响排序。

我推荐的对链接列表进行排序的方法:不要。 :) 对数组进行排序,并根据需要与链表进行转换。它很可能会更快、更容易。

基本上:

  1. 遍历列表找出长度。
  2. 分配一个值指针数组(在您的情况下,“值”表示字符串)。
  3. 再次遍历列表,将第 i:th 数组元素设置为指向第 i:th 列表项的数据。
  4. 使用 qsort() 对数组进行排序。
  5. 第三次遍历列表,用第 i:th 数组元素覆盖第 i:th 项的数据
  6. 完成。

当然,您可以分别对每个链接列表执行此操作。

关于c - 在 C 中按字母顺序对一长串单词进行排序的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22805182/

相关文章:

c - 对字符数组执行 'xor' sumcheck

c - 尝试更改链表节点中的数据

c# - 如何检索目录中的文件列表,按名称排序

ruby - 如何按字母顺序对数组进行排序?

python - 尝试删除带空格的符号 ("- "),同时保留不带空格的符号 ("-")

c - 我在 C 程序中收到运行时错误 (SIGSEGV)

c - 如何获取errno值的错误信息(C语言)?

c - scanf 格式字符串需要类型参数

android - 如何实现Android的联系人列表滚动索引效果?

java - Java有这样的字母顺序吗?