2009-08-25 122 views
1

在Delphi中排序数组的最佳方法是“字母数字”。Delphi数组元素字母数字排序顺序?

我发现在我的应用程序的旧代码此评论

“这个数组的元素必须按升序,字母数字 排序顺序。”

如果是这样,copuld是什么原因?

-VAS

+0

请完善您的问题。你是问一般的排序问题(你的第一句话),还是你的申请?如果是后者,那么应用程序对数组做什么?也许你需要把它分成多个问题。 – Argalatyr 2009-08-25 21:57:29

+0

我在谈论一般的排序问题。 – vas 2009-08-25 21:59:49

回答

5

有没有“最好”的方式,以怎样的数组中的元素(或为任何事实的集合)进行排序。排序是一种人性化的特征(事物通常不会被排序),所以我猜这个评论与你的程序期望的内容有关。

更具体地说,其他地方可能有其他代码段,希望数组元素按字母数字排序。它可以如此简单,只要将它显示到已经排序的TreeView中,以便调用代码不必先排序数组。

数组表示为连续的内存分配,因此访问速度很快。在内部,编译器只是调用GetMem来询问SizeOf(Type)*数组的大小。一般来说,排序的元素并没有影响数组的性能或内存大小。它必须在程序逻辑中。

+0

我提到的这个通信被放在所有在代码中使用 “字母数字字符”的数组之前 – vas 2009-08-25 21:55:36

+0

没有什么特别的理由,排序总是需要时间,如果某些东西会影响你的性能,特别是如果你正在排序这并不需要排序。 – 2009-08-25 22:07:12

2

不,没有“排序的最佳方式”。这就是为什么你有多种排序技术的原因之一。
使用QuickSort,您甚至可以提供比较功能,确定您最终想要的顺序。

+2

虽然没有通用的最佳排序方法,但实际上QuickSort是在普通情况下(以及大多数实际情况下)对集合进行排序的通用最佳方式,并且这已经通过数学证明。还有其他的排序方法,可以提供最好的最差情况下的性能,或者是“稳定的排序”,但总的来说,快速排序实际上是最好的排序算法(除了量子计算以及所有这些) – 2009-08-25 22:11:55

+0

我的观点与QuickSort必须提供根据您的需要在项目B之前放置项目A的规则。 – 2009-08-25 23:13:15

1

当您尝试对数组执行二分搜索时,以某种方式排序数组非常有用。与其他方法相比,二分查找可能非常快。但是,如果排序错误是错误的,搜索将无法找到记录。 保持数组排序的其他原因几乎总是出于美观的原因,以决定如何将数组发送到某个输出。

重新排列数组的最佳方式取决于数组的长度和数据的类型。 QuickSort算法在大多数情况下会产生快速结果。当你使用字符串列表和其他列表时,Delphi在内部使用它。问题是,你真的需要分类吗?它是否真的需要保持一个数组?

但保持数组排序的最好方法是保持它从添加到它的第一个元素进行排序!一般来说,我会在我的数组类型中编写一个包装,这将会保证数组的排序。 'Add'方法将搜索数组中最大的值,它小于或等于我想要添加的值。然后我在该位置之后插入新的项目。对我来说,这将是最好的解决方案。 (对于大数组,您可以再次使用二进制搜索方法来查找需要插入新记录的位置,这比将记录追加到最后要慢,但您永远不必怀疑它是否已排序,因为它是..

3

大多数情况下,数组排序以提供更快的搜索时间给定一个长度为L的列表,我可以与中点(L DIV 2)进行比较,并快速确定是否需要查看更大的一半,或者然后递归地继续使用这个模式,直到我没有任何东西可以被分割或找到我的匹配,这就是所谓的二进制搜索,如果列表没有排序,那么这种类型的操作是不可用的,而是我必须检查列表中的每个项目,直到我到达最后。