ソートされていない場合 (または、検索を支援できるメンバー間に関係があるデータ構造に保持されている場合)、すべてのメンバーを調べて正しいメンバーを見つける必要があります。
最も簡単な解決策は、おそらくそれを並べ替えてから、バイナリ チョップ/検索を実行して、条件に一致する要素を見つけることです。
ソートされていない配列を引き続き使用できるようにして効率を高めたい場合はsorted
、リストがソートされていることを示すフラグを配列のどこかに維持します (つまり、すべてをインジケータと配列を含むクラスに変換します)。
false
次に、配列が変更されるたびにこのフラグを設定します。
検索を実行する時点で、最初にsorted
フラグをチェックし、配列が設定されている場合は配列を並べ替えますfalse
(そのプロセスの一部として設定true
します)。フラグが の場合はtrue
、並べ替えをバイパスします。
そうすれば、必要なときにのみソートできます。配列が最後の並べ替えから変更されていない場合は、再並べ替えの意味がありません。
ユーザーがそれを必要とする場合は、元のソートされていないリストを維持し、ソートされたリストをクラス内の追加の配列として保持することもできます (配列をクラス化するもう 1 つの利点)。そうすれば、何も失うことはありません。ユーザーが取得するためのオリジナルの手つかずのデータと、目的の要素を効率的に見つけるための迅速な手段があります。
オブジェクト(ソート時)には次が含まれます。
int[] lows = {0,9,0,0,5,0,0,8,4,1,3,0,0,0,0};
int[] sortedlows = {0,0,0,0,0,0,0,0,0,1,3,4,5,8,9};
boolean isSorted = true;
次に に変更that_object[0]
すると3
、次のようになります。
int[] lows = {3,9,0,0,5,0,0,8,4,1,3,0,0,0,0};
int[] sortedlows = {0,0,0,0,0,0,0,0,0,1,3,4,5,8,9};
boolean isSorted = false;
を検索する前にソートが必要であることを示しますsortedLows
。
これをクラスに変換する必要はないことに注意してください。パフォーマンスが心配な場合 (具体的には getter メソッドを介して配列要素にアクセスする場合)、配列を維持し、並べ替えられていない配列への直接アクセスを許可しながら自分自身にフラグを立てることができます。配列を変更するコード内のすべての場所でもフラグが正しく設定されていることを確認する必要があります。
ただし、このパスを使用する前にパフォーマンスを測定する必要があります。オブジェクト自体がすべてを制御するため、クラスベースの方法は「より安全」です。