在Delphi中对数组进行排序的最佳方法是“字母数字”。
我在我的应用程序的旧代码中找到了这条评论
“此数组的元素必须是升序的,字母数字 排序顺序。“
如果是这样,那是什么原因?
-VAS
答案 0 :(得分:5)
关于如何对数组的元素(或该事实的任何集合)进行排序,没有“最佳”的方法。排序是一种人性化的特征(事情通常不是排序的)所以我猜这个评论更多地与你的程序期望有关。
更具体地说,其他地方可能还有其他代码段,希望数组元素按字母顺序排序。它可以很简单,就像将它显示到已经排序的TreeView中一样,这样调用代码就不必先对数组进行排序。
数组表示为连续的内存分配,因此访问速度很快。在内部,编译器只调用GetMem,询问SizeOf(Type)*数组大小。元素排序的方式一般都不会影响数组的性能或内存大小。它必须在程序逻辑中。
答案 1 :(得分:3)
大多数情况下,对数组进行排序以提供更快的搜索时间。给定长度L的列表,我可以与中点(L DIV 2)进行比较并快速确定是否需要查看较大的一半或较小的一半,并递归地继续使用此模式,直到我要么没有任何划分或者找到了我的比赛。这就是所谓的二进制搜索。如果列表未排序,则此类操作不可用,而是我必须检查列表中的每个项目,直到我到达结尾。
答案 2 :(得分:2)
不,没有排序的“最佳方式”。这就是为什么你有多种分类技术的原因之一 使用QuickSort,您甚至可以使用比较功能确定最终需要的订单。
答案 3 :(得分:1)
当您尝试对阵列执行二进制搜索时,以某种方式对数组进行排序很有用。与其他方法相比,二进制搜索可以非常快。但如果排序错误错误,搜索将无法找到记录。 保持数组排序的其他原因几乎总是出于美观的原因,决定如何将数组发送到某个输出。
重新排序数组的最佳方法取决于数组的长度及其包含的数据类型。在大多数情况下,QuickSort算法可以提供快速结果。当你使用字符串列表和其他一些列表时,Delphi会在内部使用它。问题是,你真的需要排序吗?是否真的需要保持阵列?
但是保持数组排序的最好方法是保持它从你添加到它的第一个元素中排序!一般来说,我在数组类型周围编写一个包装器,它将负责保持数组的有序性。 “添加”方法将搜索数组中的最大值,该值小于或等于我要添加的值。然后我在该位置之后插入新项目。对我来说,这将是最好的解决方案。 (对于大数组,你可以再次使用二进制搜索方法来找到你需要插入新记录的位置。它比将记录追加到最后要慢但你永远不必怀疑它是否已经排序,因为它是...