C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++標準テンプレートライブラリ(STL)でのバイナリ検索


対数探索と呼ばれる二分探索は、ソートされた配列内の要素を検索する検索アルゴリズムです。アルゴリズムは、配列を再帰的に2つに分割します。要素が中央の位置にある場合は戻り、それ以外の場合は除算を呼び出して、要素が見つかるまで再度確認します。

動作中

このアルゴリズムは、並べ替えられた配列の中央の要素を検索対象の要素と比較することで機能します。

検索要素が等しいの場合 真ん中の要素に移動し、インデックスを返す 要素の。

検索要素が大きい場合 中央の要素よりも、左側のサブ配列を検索 つまり、配列の中央から最後までの次の要素からのサブ配列。

検索要素が少ない場合 真ん中の要素よりも、右のサブ配列で検索 つまり、最初の要素から配列の中央に先行する要素までのサブ配列。

構文

標準のバイナリソートの呼び出し、次の構文が使用されます-

binary_search(start_address , end_address , element)

パラメータ

start_addressは、配列の最初の要素のアドレスです。

end_addressは、配列の最後の要素のアドレスです。

elementは、配列内で検出される要素です。

戻る

見つかった場合は配列内の要素のインデックスと等しい値の整数を返し、それ以外の場合は0を返します。

#include <algorithm>
#include <iostream>
using namespace std;
void printArray(int a[], int arraysize){
   for (int i = 0; i < arraysize; ++i)
      cout << a[i] << " ";
}
int main(){
   int arr[] = {1 , 5, 9, 7 , 3, 2 , 0 , 4};
   int sizeofarr = sizeof(arr)/sizeof(arr[0]);
   cout<<"The Element of array are :\n";
   printArray(arr , sizeofarr);
   cout<<"\nSorting Elements of array.";
   sort(arr , arr+sizeofarr);
   cout<<"\nSorted array is : ";
   printArray(arr, sizeofarr);
   cout<<"\nElement to be searched is 4";
   if(binary_search(arr , arr+sizeofarr , 4))
      cout<<"\nElement found ";
   else
      cout<<"\nElement not found";
}

出力

The Element of array are :
1 5 9 7 3 2 0 4
Sorting Elements of array.
Sorted array is : 0 1 2 3 4 5 7 9
Element to be searched is 4

  1. C ++標準テンプレートライブラリ(STL)の優先キュー

    優先度キューは、優先度に基づいて要素の挿入と削除をサポートする優先度の高い要素のコレクションを格納するための抽象データ型です。つまり、優先度の高い要素はいつでも削除できます。優先度付きキューは、スタック、キュー、リストなどの場所に関して要素を線形に格納しません。優先度付きキューADT(抽象データ型)は、優先度に基づいて要素を格納します。 優先キューは次の機能をサポートします − サイズ() −優先キュー内の要素数を返すため、優先キューのサイズを計算するために使用されます。 Empty() −優先キューが空の場合はtrueを返し、そうでない場合はfalseを返します 挿入(要素) −

  2. C ++プログラムでの二分探索?

    二分探索は、半区間探索、対数探索、または二分探索とも呼ばれ、ソートされた配列内のターゲット値の位置を見つける検索アルゴリズムです。二分探索は、ターゲット値を配列の中央の要素と比較します。それらが等しくない場合、ターゲットが存在できない半分が削除され、残りの半分で検索が続行され、再び中央の要素がターゲット値と比較され、ターゲット値が見つかるまでこれが繰り返されます。残りの半分が空の状態で検索が終了した場合、ターゲットは配列に含まれていません。アイデアは単純ですが、バイナリ検索を正しく実装するには、特に配列の値が範囲内の整数のすべてではない場合、終了条件と中間点の計算に関する微妙な点に注意する必要