序文
この記事では、二分探索アルゴリズムの簡単な例を使用して、二分探索アルゴリズムの具体的な考え方、実際の事例、概要など、二分探索とは何かを説明します。この記事が役に立ったと思ったら、コードが書けない私を「いいね!」してください、何か質問があればコメント欄にメッセージを残していただければ、順次返信させていただきます。早速、二分探索アルゴリズムとは何かを理解しましょう。
(1) 二分探索アルゴリズムとは何ですか?
二分探索、二分探索、二分探索などとも呼ばれる二分探索は、分割統治アルゴリズムに基づいて設計された探索アルゴリズムです。ターゲット要素を検索するための二分探索アルゴリズムの中心的な考え方は、検索領域を継続的に絞り込み、ターゲット要素を見つける難易度を軽減し、必要な要素を見つけることです。
具体的な実装プロセスは次のとおりです。
1. 順序付けされた配列 arr[ ] = { 1,2,3,4,5,6,7,8,9,10 } を定義します。ターゲット要素は 7 です。
2.添字、中間を決定します。要素の添字は ( 0+9 )/ 2= 4、
中間要素は 5 < 7、[0, 4] 領域には対象の要素はないと結論付けることができ、対象図に示すように、要素は [5, 9] 領域にのみ配置できます:
3. [5, 9] 領域で、中央の要素の添字を再決定します: [ (4+1) + 9 ] = 7、図に示すように:
中央の要素 8 > 7、[7, 9] エリア内にターゲット要素はなく、ターゲット要素は [5,6] にのみ配置できると結論付けることができます。図に示すように:
4. [5, 6] 領域では、中央の要素の添字は次のとおりです: [ 5 + (7-1) ] = 5、中央の要素は 6<7、要素は 2 つだけです探している範囲と中央の要素は探しているターゲット要素ではありません。つまり、探しているターゲット要素は 7 です。
注: 二分検索アルゴリズムは、順序付けされたシーケンスにのみ適用でき、昇順または降順のシーケンスでターゲット要素を検索する場合にのみ使用できます。
(2) 二分探索アルゴリズムの単純な例
順序付き配列で特定の数値 n を見つけ、探している数値を k=7 と仮定して、順序付き配列 arr[ ] = { 1,2,3,4,5,6,7,8,9,10 } を定義します。 。
1. sizeof 演算子を使用して、配列内の要素の数、つまり、配列内の要素の数 = 配列の長さ / 配列内の要素のサイズを計算します。 2. 次の左と右の添え字を見つけます
。配列要素
3. while 二分法検索ループを定義する 本体
特定の手順には、コード内に関連するコメントが付けられています。コードは次のとおりです。
#include <stdio.h>
int main()
{
int arr[] = {
1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int left = 0;//左下标
int right = sz - 1;//右下标=元素个数-1
//二分查找循环体
while (left<=right)//在查找过程中,如果要查找的元素不存在,就会出现左下标和右下标交错的情况,所以while循环应满足左下标小于或等于右下标的条件
{
int mid = (left + right) / 2;//中间元素下标
if (arr[mid] > k)//如果要找的元素小于中间元素的下标,则新的右下标=mid-1,左下标不变
{
right = mid - 1;
}
else if (arr[mid] < k)//如果要找的元素大于中间元素的下标,则新的左下标=mid+1,右下标不变
{
left = mid + 1;
}
else
{
printf("找到了,下标是:%d\n", mid);//要找的元素正好是中间元素
break; //跳出循环
}
}
if (left > right)//不满足左下标小于或等于右下标的条件,则要找的元素不存在
{
printf("找不到\n");
}
return 0;
}
(3) まとめ
1. このコードでは、left<=right (左添字 <= 右添字) の場合のみ while ループに入って検索します。それ以外の場合、検索対象の要素は順序付けされた配列内にありません。 2. それぞれのプロセスで
search 、中央の要素の添字は左と右の添字に従って計算する必要があります。中央の要素の添字と検索された要素を比較する方法 3. left<
=right 条件を満たすとループに入り、最後に抜け出します。ループの
4. No left<=right 条件を満たす、つまり検索された要素が見つからず、プログラム コードは見つかる場合と見つからない場合の 2 つのケースに分けられます。