複雑さを実際に「追加」することはありません。おっしゃる通り、ソートはO(n * log n)、検索はO(log n)です。それらに対して「通常の計算」を行うと、(n+1)*log n になりますが、これは依然として n*log n です。
そのような複数のステップを実行している場合、通常、最も複雑なものを取り上げてそれを呼び出します。結局のところ、n が十分に大きい場合、n*log n は log n を小さくします。
このように考えてください: n が 1,000,000 の場合、n*log n は 2,000 万です。log n は 20 です。では、20,000,000 と 20,000,020 の違いは何でしょうか? (log n) 項は関係ありません。したがって、(n log n) + (log n) は、すべての意図と目的において、(n log n) に等しくなります。n が 100 の場合でも、log n は 7 です。(log n) 項は、n が適度に大きい場合でも違いはありません。
特定のケースで、リストを 1 回だけ検索する必要がある場合は、順次検索が適しています。複数回検索する必要がある場合は、m 回の検索 O(m * n) のコストと、並べ替えと検索のコストを比較検討する必要があります。最小時間に関心があり、リストを検索する回数がわかっている場合は、(m*n) が (n * log n) より小さい場合は順次検索を使用します。それ以外の場合は、並べ替えを使用してから二分探索を使用します。
しかし、考慮すべき点はそれだけではありません。並べ替えられたリストでの二分検索では応答時間が非常に短くなりますが、線形検索では 1 つのアイテムに非常に長い時間がかかる場合があります。プログラムの起動時にリストを並べ替える余裕がある場合は、プログラムが動作するとアイテムが見つかる (または見つからない) 速度がはるかに速くなるため、おそらくそれが最善の方法です。リストを並べ替えると、応答時間が短縮されます。操作中に非常に予測不可能な応答時間を経験するよりも、起動時に並べ替えの代償を支払う方が適切です。または、思ったよりも多くの検索を行う必要があることがわかります。. .