繁体   English   中英

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

[英]What would be the optimal way to sort a long list of words in alphabetical order in C?

如标题所示,我需要按字母顺序对很多(数十万)字符串进行排序。 我有几个链表,每个链表包含特定长度的单词。 也就是说,我有6个字母字符串列表,7个字母字符串列表,...,10个字母字符串列表。

我当时在考虑使用基数排序,但是我想看看那里是否还有更好的选择,因为在按字母顺序排列所有单词长度相同的列表时,找不到任何特定的东西。

编辑:

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

我认为长度与排序无关紧要,不是吗? 您没有解释您认为这将如何影响排序。

我推荐的对链表进行排序的方法:不可以。 :)而是对数组进行排序,并根据需要在链表之间进行转换。 这很可能会更快,更容易。

基本上:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM