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

Cプログラムでの二分探索(再帰的および反復的)


二分探索 は、ソートされた配列内の要素(ターゲット値)の位置を見つけるために使用される検索アルゴリズムです。二分探索を適用する前に、配列をソートする必要があります。

二分探索は、これらの名前、対数探索、二分探索、半区間探索でも知られています。

作業中

二分探索アルゴリズムは、配列の中央の要素によって検索される要素を比較することによって機能し、この比較に基づいて、必要な手順に従います。

ケース1 − element =Middle、要素が見つかった場合はインデックスを返します。

ケース2 − element> middle、middle+1インデックスからnまでのサブ配列内の要素を検索します。

ケース3 − element

アルゴリズム

パラメータinital_value、end_value

Step 1 : Find the middle element of array. using ,
middle = initial_value + end_value / 2 ;
Step 2 : If middle = element, return ‘element found’ and index.
Step 3 : if middle > element, call the function with end_value = middle - 1 .
Step 4 : if middle < element, call the function with start_value = middle + 1 .
Step 5 : exit.

二分探索アルゴリズム関数の実装では、呼び出しを使用して関数を繰り返し使用します。この呼び出しには2つのタイプがあります-

  • 反復
  • 再帰的

反復呼び出し 同じコードブロックを複数回ループしています]

再帰呼び出し 同じ関数を何度も呼び出しています。

反復呼び出しを使用して二分探索を実装するプログラム

#include <stdio.h>
int iterativeBinarySearch(int array[], int start_index, int end_index, int element){
   while (start_index <= end_index){
      int middle = start_index + (end_index- start_index )/2;
      if (array[middle] == element)
         return middle;
      if (array[middle] < element)
         start_index = middle + 1;
      else
         end_index = middle - 1;
   }
   return -1;
}
int main(void){
   int array[] = {1, 4, 7, 9, 16, 56, 70};
   int n = 7;
   int element = 16;
   int found_index = iterativeBinarySearch(array, 0, n-1, element);
   if(found_index == -1 ) {
      printf("Element not found in the array ");
   }
   else {
      printf("Element found at index : %d",found_index);
   }
   return 0;
}

出力

Element found at index : 4

再帰呼び出しを使用して二分探索を実装するプログラム

#include <stdio.h>
int recursiveBinarySearch(int array[], int start_index, int end_index, int element){
   if (end_index >= start_index){
      int middle = start_index + (end_index - start_index )/2;
      if (array[middle] == element)
         return middle;
      if (array[middle] > element)
         return recursiveBinarySearch(array, start_index, middle-1, element);
      return recursiveBinarySearch(array, middle+1, end_index, element);
   }
   return -1;
}
int main(void){
   int array[] = {1, 4, 7, 9, 16, 56, 70};
   int n = 7;
   int element = 9;
   int found_index = recursiveBinarySearch(array, 0, n-1, element);
   if(found_index == -1 ) {
      printf("Element not found in the array ");
   }
   else {
      printf("Element found at index : %d",found_index);
   }
   return 0;
}

出力

Element found at index : 3

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

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

  2. Pythonプログラムでの線形探索

    この記事では、線形検索とPython3.xでの実装について学習します。またはそれ以前。 アルゴリズム 指定されたarr[]の左端の要素から開始し、要素xをarr []の各要素と1つずつ比較します。 xがいずれかの要素と一致する場合は、インデックス値を返します。 xがarr[]のどの要素とも一致しない場合は、-1を返すか、要素が見つかりません。 次に、特定のアプローチの視覚的表現を見てみましょう- 例 def linearsearch(arr, x):    for i in range(len(arr)):     &nbs