数组.sort(或任何集合排序方法)取决于c#中单个项的大小



我们都知道数组所依赖的排序方法。速度受数组中存储的项数的影响。但是,速度会受到单个物品大小的影响吗?我在网上搜索了这个问题,但我还没有找到一个令人信服的答案。有人有有用的链接或解释可以显示在这里吗?

例如,我们可以有一个存储100个字符串项的数组,它们的长度都是20个字符串字符。如果100个字符串项都是30个字符串字符,排序速度会有所不同吗?

Thank you

只要是引用类型,不,大小无关紧要。一个引用的大小总是相同的,不管它指向的对象有多大,所以交换两个引用的时间是恒定的,不管它们指向什么。

编辑:既然你精炼了这个问题,很明显找出排序顺序会花更多的时间,比较两个对象就越复杂。如果有100个字符串,每个字符串有100个字符,每个字符串的前两个字符不同,那么排序它们将比有100个字符串,每个字符串有100个字符,都包含98个'a,只在最后两个字符不同要快。

一般来说,在考虑性能问题之前,请确保确实存在问题。对比100个字符串对于今天的硬件来说是微不足道的。

No。实际上,sort方法移动集合中的指针,无论指针指向的结构是什么,它们的大小都是相同的。除了集合大小之外,排序方法的时间还受到比较列表中两个对象所花费的时间的影响。

如果100个字符串项都是30个字符串字符,排序速度会有所不同吗?

可能,是的。可能没有。视情况而定。如果你有一串只有在第30个字符处不同的字符串,这将比一串只有在第20个字符处不同的字符串花费更长的时间排序——仅仅是因为每个字符串比较将有更多的工作要做。另一方面,如果你有一堆字符串,它们的第一个字符不同,那么不管后面有多少个字符,比较都会很快。

还要注意,您使用的数据越多,CPU缓存的效率可能越低,这可能会产生巨大的差异。

最新更新