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月のドローン業界の重要な動向の概要

ブログ    
ブログ    
ブログ    

推薦する

Googleの新しいアルゴリズムのおかげで、ロボットが歩くことを学習するのに平均3.5時間しかかからない。

[[317667]]写真: 中空の玄関マットの上で動くレインボーダッシュこの記事はLeiphone...

...

謎の AI 顔変更ソフトウェアが世界中のソーシャル ネットワークに侵入!マスク氏は数秒でルネサンス貴族になる

[[410798]] FaceAppの人気は過ぎ去り、最近では、あなたの顔を数秒で「ディズニー」に変...

...

遠隔医療ロボットにはこれらの特性が求められる

科学技術の継続的な革新により、より多くの新しいインテリジェント製品が開発され、さまざまな業界で使用さ...

Amazon Rekognition の紹介

Amazon Rekognition を使用すると、アプリケーションに画像およびビデオ分析機能を簡単...

第3回北京知源大会が開幕、世界最大のインテリジェントモデル「五道2.0」が発表

6月1日、北京知源人工知能研究所(以下、知源研究所)が主催する2021年北京知源会議が北京市中関村国...

畳み込みニューラルネットワークの父:人工知能が動画から常識を学ぶための次のステップ

志東西(公式アカウント:zhidxcom)起源ディープラーニング分野の大物として、ヤン・ルカン氏は近...

...

ヤン・ルカンの最新インタビュー: エネルギーモデルは自律型人工知能システムの出発点

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

兵器化されたロボットはやってくるのか?米警察、ボストン・ダイナミクスのロボット犬をパトロールに活用

「ブラックミラー」シリーズのエピソード「メタルヘッド」を見て、ロボット犬が兵器としてもたらす危害を知...

...

それは単なるアルゴリズムとモデルですか?これらのポイントによりAIを徹底的に理解できる

現在、AIはデジタル変革においてより重要な役割を果たしています。デジタル変革プロセス全体は、「クラウ...

...