【发布时间】:2009-10-19 02:55:19
【问题描述】:
有人可以为我的自定义链接列表+示例推荐一种排序算法,基本上它类似于通用链接列表,所以如果你可以为通用链接列表提供示例,那就太好了。
我正在计划实现归并排序,由于我对任何算法都不是很熟悉,所以请就优缺点提出建议,只是从谷歌那里汲取了归并排序算法的想法。
仅在可能的情况下提供 c# 示例:)
干杯
【问题讨论】:
标签: c# .net algorithm sorting linked-list
有人可以为我的自定义链接列表+示例推荐一种排序算法,基本上它类似于通用链接列表,所以如果你可以为通用链接列表提供示例,那就太好了。
我正在计划实现归并排序,由于我对任何算法都不是很熟悉,所以请就优缺点提出建议,只是从谷歌那里汲取了归并排序算法的想法。
仅在可能的情况下提供 c# 示例:)
干杯
【问题讨论】:
标签: c# .net algorithm sorting linked-list
合并排序是个好主意,因为与其他高级排序不同,它不需要可索引性(因此它在链表和数组上都可以正常工作)。 C# 中的一般介绍是 here——它不使用泛型,并且无用地引入了数组列表和索引,在这些地方事情可以通过迭代很好地进行,但我找不到 C# 中正确完成的基本介绍。
所有高级排序算法的一个警告是,在递归中,最好不要一直使用“高级算法”,而是切换到更简单的算法以获得足够小的子列表 - 简单算法的大-O,但乘法常数更小,因此混合通常是最佳的。
一个有价值的变体是natural mergesort,它利用了数据中可能已经存在的运行——我给出的 URL 使用了伪代码,但它的可读性很强。自然归并排序非常适合已经大部分排序但有一些项目乱序的数据,例如附加在最后——当少数项目确实很少时,它可以提供渐近 O(N) 性能;-)。
【讨论】:
我在link text找到了一个不错的 c# 排序实现
【讨论】:
这听起来很像家庭作业。维基百科有一些很好的伪代码供您开始使用。
至于哪种算法最好,这取决于内存限制、处理能力、样本大小、数据类型等等。没有“最好”的算法(尽管有最差的算法。冒泡排序有人吗?)
【讨论】: