ソートされた配列のバイナリ検索をC言語で実装する

原則:二分探索は、半探索とも呼ばれ、ソートされた配列にのみ適用できます。。二分探索の原理は非常に単純であり、ソートされた配列の検索効率も非常に高くなります。。具体的な原則は、毎回ターゲット値kを配列の中央のデータ(下の[mid]で表され、midは配列の中央位置のインデックス値を表す)と比較することです。kが[mid]より大きい場合は、kを続行します。a[mid]部分の中央より大きい値と比較します。kがa [mid]より小さい場合は、kをa[mid]の中央の値と比較し続けます。ミッド]部分。注:順序付けされていない配列の場合、最初に並べ替えてからバイナリ検索を使用すると、この方法を使用して検索できますが、最もプリミティブな配列の要素の位置が変更されます。したがって、順序付けされていない配列の場合は、達成するための基本的な検索アルゴリズム

#include<stdio.h>
int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
	int left = a[0];
	int sz = sizeof(a) / sizeof(a[0]);      //计算数组大小
	int right = a[sz - 1];    //使右值等于最后一个数字
	int k = 12;           //要查找的数是12
	int mid;
	while (left<=right)       //当左值小于=右值的时候进入循环,左值大于右值退出循环
	{
		 mid = (right + left) / 2;// 中间值等于左值加右值再除2
		if (k < mid)
		{
			right = mid-1;           //如果要找的数字小于mid,使右值等于mid-1
		}
		else if (k > mid)
		{
			left = mid + 1;      //如果要找的数字大于mid,使左值等于mid+1
		}
		else
		{
			printf("找到了,下标是:%d", mid - 1);    //如果要找的数字等于mid则找到了
			break;
		}
	}
	if (left > right)      //当左值大于右值时,就说明找不到
		printf("找不到");
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_49449676/article/details/124212324
おすすめ