logo

配列内の要素を検索する C プログラム

この記事では、配列内の要素を検索する C プログラムについて、さまざまな方法と例を交えて説明します。

配列とは何ですか?

データ構造 と呼ばれる 配列 固定長の一連の同一タイプの項目を保持します。インデックス作成により効率的なアクセスが可能になるため、データ コレクションの保存と操作によく使用されます。

例: intnumbers[] = {10, 20, 30, 40, 50};

配列内の要素の検索

コンピューター プログラミングにおける一般的な操作は、配列内の特定の要素を検索することです。要素のインデックスを特定する特定の値の存在を検索する場合でも、要素が存在するかどうかを確認する場合でも、効率的な検索アルゴリズムを使用すると、コードの効率が大幅に向上する可能性があります。この記事では、C プログラミング言語を使用して配列内の要素を検索するためのさまざまな方法について説明します。

配列内の要素を検索するには、主に 2 つの方法があります。

1. 線形探索

配列またはリスト内の特定の要素を見つけるために使用される単純な検索戦略は、と呼ばれます。 線形探索 、と呼ばれることもあります 順次検索 。これは、各配列メンバーをターゲット値と比較して、 マッチ または トラバース 配列全体を繰り返し処理します。

線形探索の基本的な手順は次のとおりです。

    始める 配列の最上位要素を使用します。
  1. ターゲット値は現在の要素と比較する必要があります。
  2. 現在の要素が要求された値と一致する場合、検索は成功し、アルゴリズムは要素のインデックスまたはその他の必要な出力を返すことができます。
  3. 現在の要素が目的の値と一致しない場合は、配列内の次の要素に移動します。
  4. 一致するか、配列の最後に到達するまで、手順 2 ~ 4 を繰り返します。

プログラム:

 #include int linearSearch(int arr[], int n, int target) { for (int i = 0; i<n; i++) { if (arr[i]="=" target) return i; the index target is found } -1; -1 not int main() arr[]="{5," 2, 8, 12, 3}; n="sizeof(arr)" sizeof(arr[0]); calculate number of elements in array result="linearSearch(arr," n, target); (result="=" -1) printf('element found
'); else at %d
', result); 0; < pre> <p> <strong>Output:</strong> </p> <pre> An element found at index 2 </pre> <h3>2. Binary Search</h3> <p>The <strong> <em>binary search</em> </strong> technique is utilized to quickly locate a specific element in a sorted <strong> <em>array</em> </strong> or <strong> <em>list</em> </strong> . It uses a <strong> <em>divide-and-conquer</em> </strong> <strong> <em>strategy</em> </strong> , periodically cutting the search area in half until the target element is located or found to be absent.</p> <p>This is how binary search functions:</p> <ol class="points"> <li>Have a sorted array or list as a base.</li> <li>Establish two pointers, <strong> <em>left</em> </strong> and <strong> <em>right</em> </strong> , with their initial values pointing to the array&apos;s first and end members.</li> <li>Use <strong> <em>(left + right) / 2</em> </strong> to get the index of the center element.</li> <li>Compare the target value to the middle element. <ol class="pointsa"> <li>The search is successful if they are equal, and then the program can return the <strong> <em>index</em> </strong> or any other required result.</li> <li>The right pointer should be moved to the element preceding the <strong> <em>middle element</em> </strong> if the middle element is greater than the target value.</li> <li>Move the <strong> <em>left pointer</em> </strong> to the element following the <strong> <em>middle element</em> </strong> if the middle element&apos;s value is less than the target value.</li> </ol></li> <li>Steps <strong> <em>3</em> </strong> and <strong> <em>4</em> </strong> should be repeated until the target element is located or the left pointer exceeds the right pointer.</li> <li>The desired element is not in the array if it cannot be located.</li> </ol> <p> <strong>Program:</strong> </p> <pre> #include int binarySearch(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right-left) 2; if (arr[mid]="=" target) return mid; the index target is found } < left="mid" 1; else right="mid-1;" -1; -1 not main() arr[]="{2," 5, 8, 12, 20, 23, 28}; n="sizeof(arr)" sizeof(arr[0]); calculate number of elements in array result="binarySearch(arr," 0, - 1, target); (result="=" -1) printf('element found
'); at %d
', result); 0; pre> <p> <strong>Output:</strong> </p> <pre> An element found at index 4 </pre> <hr></=></pre></n;>

2.二分探索

二分探索 このテクニックは、ソートされたリスト内の特定の要素を素早く見つけるために利用されます。 配列 または リスト 。それは、 分割統治 戦略 、ターゲット要素が見つかるか、存在しないことが判明するまで、定期的に検索領域を半分にカットします。

二分探索は次のように機能します。

  1. ソートされた配列またはリストをベースとして使用します。
  2. 2 つのポインタを確立し、 そして 、その初期値は配列の最初と最後のメンバーを指します。
  3. 使用 (左+右) / 2 中心要素のインデックスを取得します。
  4. ターゲット値を中央の要素と比較します。
    1. それらが等しい場合、検索は成功し、プログラムは 索引 またはその他の必要な結果。
    2. 右ポインタは、その前の要素に移動する必要があります。 中間要素 中央の要素がターゲット値より大きい場合。
    3. を移動します。 左ポインタ に続く要素に 中間要素 中央の要素の値がターゲット値より小さい場合。
  5. ステップ 3 そして 4 ターゲット要素が見つかるか、左ポインタが右ポインタを超えるまで、この操作を繰り返す必要があります。
  6. 目的の要素が見つからない場合、その要素は配列内にありません。

プログラム:

 #include int binarySearch(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right-left) 2; if (arr[mid]="=" target) return mid; the index target is found } < left="mid" 1; else right="mid-1;" -1; -1 not main() arr[]="{2," 5, 8, 12, 20, 23, 28}; n="sizeof(arr)" sizeof(arr[0]); calculate number of elements in array result="binarySearch(arr," 0, - 1, target); (result="=" -1) printf(\'element found
\'); at %d
\', result); 0; pre> <p> <strong>Output:</strong> </p> <pre> An element found at index 4 </pre> <hr></=>