オブジェクトのシーケンスがあり、それぞれに 0 から ushort.MaxValue (0-65535) までのシーケンス番号があります。シーケンスには最大で約 10,000 個のアイテムがあるため、重複があってはならず、アイテムはロード方法によってほとんどソートされています。データに順番にアクセスするだけでよいので、リストに入れる必要はありません。また、かなり頻繁に行われるものであるため、Big-O が高すぎることはありません。
このリストをソートする最良の方法は何ですか?
シーケンスの例は次のようになります (この例では、シーケンス番号が 1 バイトで、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) です。
もう 1 つの方法は、アイテムを通常どおりに並べてから、分割 (6-240) を見つけて、最初のアイテムを最後に移動することです。しかし、それが良い考えかどうかはわかりません。
私の 3 番目のアイデアは、間違ったシーケンス番号が見つかるまでシーケンスをループし、正しい番号が見つかるまで先を見て、正しい位置に移動することです。ただし、早い段階で間違ったシーケンス番号がある場合、これは潜在的に非常に遅くなる可能性があります。