我将 TList/TObjectList 和 TStringList(带有关联对象)用于多种任务,或者按原样使用,或者作为更复杂结构的基础。虽然排序功能通常足够好,但有时我需要做一个stable排序,两个列表都使用快速排序。
为 TList 和/或 TStringList 实现稳定排序的最简单方法是什么?我是否必须编写自己的排序例程,或者可以通过使用 TStringListSortCompare/TListSortCompare 的一些巧妙技巧来完成吗?
您必须编写自己的排序例程。
您可以阅读当前的 QuickSort 实现,并编写自己的稳定版本(例如合并排序或任何其他稳定变体).
一些技巧:
- 如果您确定索引是 Count,您可以使用快速指针数组(
TList.List[]
)而不是更慢Items[]
or GetItem()
:子方法调用和范围检查会减慢执行速度;
- 比较函数大多数时候是搜索的速度瓶颈——所以要小心这部分;
- 如果您需要速度,请在真实(例如随机)数据上使用真实的分析器 - 但在使其快速之前先使其正确;
- 从现有的排序实现开始;
- 为了最小化堆栈空间,您可以使用临时记录来存储并在递归调用之间共享变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)