c#中array.sort()用法

结论:Array.Sort(array, array) 使用不正确。
第二个参数不能是数组。

正确用法:Array.Sort(array1 , array2 )。
array1 是要排序的数组,array2 是与 array1 对应的元素数组。

数组1 :[b,a,d,c] array2 : [s1 , s2 , s3 , s4 ]
Array.Sort(array1 , array2 ) 结果是: 矩阵 1 :[A、B、C、D] array2 : [s2 , s1 , s4 , s3 ]
第二个参数为空时: Array.Sort(array1 ) 直接对 array1 进行排序。

2 01 0 年,北京,代码示例经过验证。

C# 排序 一千万个int型数据的数组,要排序,升序降序均可

整理鸽子巢是一件很有趣的事。
我想知道它会多快。
所以我写了一个测试。

我选择了2 02 2 年,很平凡的一年。
我在电脑上做了一个实验。
我得到了 1 0000k 个从 0 到 1 00k 的无序数字。
这只是随机故障。

现在,让我们尝试使用您提供的代码进行排序。
该代码是我上面发布的。
我写完就开始跑步。

你看这个速度,0.08 秒。
我给你 1 0,000k 就这样了。
当时很困惑。
我想我必须跑很长一段时间。
也许我有点极端,认为这不应该发生得那么快。

再运行几次后,稳定在0.08 秒。
我想知道这种分类背后的理由。
直到后来我才意识到,我可能利用了数组数据结构,根据值的大小直接将值扔到相应的位置。
虽然简单粗暴,但是确实有效。

无论如何,我对这个结果感到惊讶。
没想到这个算法这么快。
你的测试很有说服力。
0.08 秒,1 0000k数据,其实并不慢。

C# 中的 SortedSet 类

说实话,一开始使用 SortedSet 对我来说似乎有点神秘。
想了几遍,我才真正明白它的好处。
说一下我遇到的一个现实场景:我之前创建的文件索引工具需要同时支持快速搜索和去重,还需要按文件名排序。

当时我在考虑用List加HashSet还是只用TreeSet。
然后我尝试了SortedSet,发现它比TreeSet简单。
你看,对于List和HashSet的组合,需要先迭代列表,用HashSet去重,然后排序,这需要几个步骤。
SortedSet 将直接为您执行此操作。
它会在插入时自动排序,并且重复的元素会被忽略,因此您根本不必担心。

有趣的是,基于红黑树来实现这一点尤为重要。
我查了资料,发现红黑树被设计为平衡二叉搜索树,因此所有的插入、删除和搜索操作都是在O(log n)中可靠地执行的。
让我们以我的文件索引为例。
每天可能会有数百个新文件到达。
使用SortedSet来维护索引,查询速度没得说。

还有一个细节让我印象深刻。
在使用字典进行索引之前,您必须使用文件名作为键。
现在,使用 SortedSet,您只需提供一个文件名,它就会自动为您排序。
想要最小的文件名吗?直接使用一行代码即可使用Max属性,这比对字典键的集合重新排序要简单得多。

老实说,SortedSet 最让我困扰的是自定义排序。
您传递一个自定义比较器,例如按文件修改时间排序或按文件大小排序,SortedSet 将接受所有这些。
我尝试使用 DateTime 类型文件进行排序并将它们直接传递给比较器。
结果,可以按照修改时间的升序正确对文件进行排序。
我不明白这是怎么回事内部实施,但无论如何运作得相当顺利。

但是需要注意的是,在使用 SortedSet 之前,必须确保元素实现 IComparable,或者向其传递一个比较器。
我朋友没注意这个就用了自己的类直接插入就崩溃了。
我自己没有运行过这个,但是查看错误消息,似乎 IComparable 没有实现。

就是这样的感觉。
SortedSet特别适合需要频繁查询和动态维护排序数据的场景。
例如,像我这次创建的优先级队列、数据库索引或文件系统监控工具都非常易于使用。
说实话,它比TreeSet更轻量,并且集合操作API(并集、交集)使用起来相当方便。