我有一个对象序列,每个对象都有一个从 0 到 ushort.MaxValue (0-65535) 的序列号。我的序列中最多有大约 10 000 个项目,因此不应该有任何重复项,并且这些项目大多是根据加载方式进行排序的。我只需要按顺序访问数据,如果有帮助的话,我不需要它们在列表中。这也是经常做的事情,所以它不能有太高的 Big-O。
对该列表进行排序的最佳方法是什么?
示例序列可以是(在此示例中,假设序列号是单字节并在 255 处换行):
240 241 242 243 244 250 251 245 246 248 247 249 252 253 0 1 2 254 255 3 4 5 6
正确的顺序将是
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 0 1 2 3 4 5 6
我有几种不同的方法,包括制作一个 ushort.MaxValue 大小的数组,并且只是增加位置,但这似乎是一种非常低效的方法,当我收到的数据有顺序跳跃时我会遇到一些问题。但是,它的性能是 O(1)..
另一种方法是正常排序项目,然后找到拆分 (6-240),并将第一个项目移动到末尾。但我不确定这是否是个好主意。
我的第三个想法是循环序列,直到找到错误的序列号,向前看直到找到正确的序列号,然后将其移动到正确的位置。但是,如果早期有错误的序列号,这可能会非常慢。