私は約50万の並べ替えられた配列を持っています。現時点では、ターゲットのintとすべての要素の差をとり、LINQ(非常に非効率的)を使って最小の差でソートすることで、正しいインデックスを選択しています。BinarySearchとの相違点に最も近いインデックスを見つける
私はBinarySearchと非常によく似たことをしたいと思います。
Pos Value
0 10
1 20
2 30
4 50
5 60
私は値24のために最も近い値を検索する場合、私は、インデックスが指定された1
ように返さたい:
int index = myArray.BinarySearch(values, 24);
if (index < 0)
index = ~index;
これは2を戻します
これは、最も近いものの代わりに、次の要素をラインに与えるからです。最も近いインデックスを返すIComparerを記述することは可能ですか?
与えられた値は:
Value ExpectedReturn
20 1
24 1
25 2
26 2
30 2
は、私はできるだけ速くこれを行うにしようとしています。今まで私がLINQで行ってきたことはすべて、よく行われたバイナリ検索で達成できると思っていました。入力いただきありがとうございます。
@Jon Skeet:+1、答えはコンパイルされず、笑顔の後に閉じ括弧がありません。 – RedFilter
"挿入する場所を見つける"効率的に、配列全体を検索する必要があるかもしれない – TalentTuner
@Saurabh:いいえ、これはBinarySearchがすでに行っていることです - 値が見つかった場合はインデックスを返しますそうでなければ '〜insertionPoint'を返します。 –