2

假设我有以下值: -

xyz12@abc
xyz1@abc
xyz15@abc
xyz2@abc
xyz22@abc

我希望排序后的输出格式为:-

xyz1@abc
xyz2@abc
xyz12@abc
xyz15@abc
xyz22@abc

如果我使用 strcmp,那么它将按每个字符进行比较,并将 xyz1@ > xyz12 作为我不想要的 @ > 2 给出。我可以使用哪些不同的算法以所需的格式对其进行排序?

4

4 回答 4

3

您要查找的 Google 关键字是“自然排序”。

于 2012-04-09T20:30:54.483 回答
0

看看 sort 实用程序是如何实现的:

$ cat test.txt | sort
xyz12@abc
xyz15@abc
xyz1@abc
xyz22@abc
xyz2@abc

现在使用 -V 开关...

$ cat test.txt | sort -V
xyz1@abc
xyz2@abc
xyz12@abc
xyz15@abc
xyz22@abc

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/sort.c

于 2012-04-09T20:26:21.740 回答
0

如果 XYZ 始终相同,则对整数值使用计数排序。否则,它可能是使用一些基于通用比较的排序和自定义比较器(即合并排序)的最简单方法。

通用我的意思是使用一些预编程的排序算法,它准备接受一些比较器函数(如果 A > B,通常返回 1,如果 A < B,则返回 -1,否则返回 0)

于 2012-04-09T20:54:41.223 回答
-1

我强烈建议你看看这个网站:

http://www.c.happycodings.com/Sorting_Searching/index.html

在 C 语言中有一个排序算法的分支。显然选择那些性能更好的算法(nlogn)。

于 2012-04-09T20:36:04.593 回答