Java プログラミング スキル - データ構造とアルゴリズム「バイナリ検索」

Java プログラミング スキル - データ構造とアルゴリズム「バイナリ検索」

[[395207]]

必要

順序付けられた配列 {1,8,10,89,1000,1234} に対してバイナリ検索を実行し、数値を入力して配列内に存在するかどうかを確認し、添え字を見つけます。存在しない場合は、「そのようなデータはありません」というメッセージが表示されます。

思考分析

  1. まず、配列の中央の添え字 mid=(left+right)/2 を決定します。
  2. 次に、検索する数値 findValue を arr[mid] と比較します。findValue > arr[mid] の場合、検索する数値は arr[mid] の右側にあるため、右に再帰します。findValue < arr[mid] の場合、検索する数値は arr[mid] の左側にあるため、左に再帰します。findValue == arr[mid] の場合、数値が見つかったため、戻ります。
  3. 再帰を終了する条件が見つかったときに再帰は終了します。配列全体を再帰してもfindValueが見つからない場合は、再帰を終了する必要があります。つまり、left > rightのときです。

コード例

  1. パッケージ com.xie.search;
  2.  
  3. java.util.ArrayList をインポートします。
  4. java.util.Arrays をインポートします。
  5. java.util.List をインポートします。
  6.  
  7. パブリッククラスBinarySearch {
  8. 静的 整数 カウント= 0;
  9.  
  10. 公共 静的void main(String[] args) {
  11. int [] arr = 新しいint [102];
  12. ar[0] = 1;
  13. ar[1] = 1;
  14. ( int i = 2; i < 102; i++) {
  15. arr[i] = i;
  16. }
  17. リスト<整数> indexList = binarySearch(arr, 0, arr.length - 1, 1);
  18. システム.out.println ( "indexList = " + indexList);
  19. System.out.println ( "検索数:" + count );
  20. /*
  21. インデックスリスト = [1, 0]
  22. 検索数: 6
  23. */
  24. }
  25.  
  26. /**
  27. * バイナリ検索、値に一致するすべてのインデックスセットを検索
  28. *
  29. * @param arr 配列
  30. * @param left左インデックス
  31. * @param right右インデックス
  32. * @param findValue 検索する値
  33. * @return見つかった場合はすべてのインデックスのコレクションを返し、見つからない場合は空を返します
  34. */
  35. 公共 静的リスト<整数> バイナリ検索( int [] arr, int   int   int findValue) {
  36. カウント++;
  37. リスト<整数> indexList = 新しい ArrayList<整数>();
  38. // left > rightの場合、再帰は完了します
  39. )の場合{
  40. 新しいArrayList<Integer> ( )を返します
  41. }
  42. int中央 = (+) / 2;
  43. int midVal = arr[mid];
  44. (findValue > midVal)の場合{
  45. // 見つける値は中央の値よりも大きく、右に再帰的に
  46. binarySearch(arr, mid + 1, right , findValue)を返します
  47. }そうでない場合 (findValue < midVal) {
  48. // 見つける値は中央の値より小さいので、左に再帰的に
  49. binarySearch(arr, left , mid - 1, findValue)を返します
  50. }それ以外{
  51. //見つかった場合は左にスキャンし、条件を満たすものをindexListに追加します
  52. 整数 温度= 中間 - 1;
  53. )の間{
  54. if ( temp < 0 || arr[ temp ] != findValue) {
  55. 壊す;
  56. }
  57. indexList.add ( temp ) ;
  58. 温度--;  
  59. }
  60.  
  61. // 再び右にスキャンし、条件を満たすものをindexListに追加します
  62. 温度= 中間 + 1;
  63. )の間{
  64. if ( temp > right || arr[ temp ] != findValue) {
  65. 壊す;
  66. }
  67. indexList.add ( temp ) ;
  68. 一時++;
  69. }
  70. インデックスリストを追加します(mid);
  71. indexListを返します
  72. }
  73. }
  74. }

【編集者のおすすめ】

  1. 驚いたことに、1 つの SQL で Oracle が爆発しました...
  2. Pythonを使ってWeChatのダイナミック絵文字を作る
  3. 初心者にも最適な、仕事の効率を上げる7つのツール
  4. Microsoft Edge 90正式版リリース: 新しいダウンロード管理メニュー、より鮮明なフォントレンダリング
  5. Alibaba Cloud Disk PC版プレビュー:速度制限はないが残念

<<:  RSA アルゴリズムが解読された場合、暗号化の将来はどうなるでしょうか?

>>:  2021年4月のドローン業界の重要な動向の概要

ブログ    
ブログ    

推薦する

...

AI探偵が事件を解決する3つの秘策

[[241150]]画像出典: Visual China今年のコナン映画は中国でも公開されるそうです...

...

人工知能チュートリアル(II):人工知能の歴史とマトリックスの再考

このシリーズの最初の記事では、人工知能、機械学習、ディープラーニング、データサイエンスなどの分野間の...

...

26億のパラメータ、智源と清華が中国の大規模事前トレーニングモデルをオープンソース化

最近、北京人工知能研究院と清華大学の研究チームは共同で、中国語を中核とした大規模な事前学習済み言語モ...

...

人工知能を活用した機械駆動型データ自動ラベル付け法

[[416242]]オブジェクト検出、オブジェクト認識、セグメンテーション タスク用の自動注釈ソリュ...

李徳易学士:人工知能の影響を最も受けている業界は教育

2019年12月22日、中国職業技術教育学会科学技術成果転換作業委員会が中国科学院コンピューティング...

Google DeepMindが復讐のために力を合わせる!ジェフ・ディーンとハサビスが1万語の記事で2023年のジェダイの反撃を要約

Google DeepMind、論文を提出してください!ちょうど今、ジェフ・ディーン氏とハサビス氏は...

Microsoft の 38 TB の内部データが漏洩!秘密鍵と3万件以上の仕事上の会話が漏洩、その背後にある理由は衝撃的

何か大きなことが起こりました!数か月前、マイクロソフトの AI 研究チームは、大量のオープンソースの...

...

Facebook エンジニアがまとめた 14 種類のアルゴリズム面接モード

プログラマー職の面接では、多くの場合、プログラミング面接プロセスを受ける必要があり、雇用主はこれを利...

...