バイナリ検索/バイナリ検索------アルゴリズムのアイデア

バイナリ検索/バイナリ検索(この方法は順次配置にのみ使用されます)

アルゴリズムは数字を見つけるための効率的な方法です

假设n个数  次数=log2n  如找232次个数,只需要32

手順:
1。左=最初の桁の底(0)、右=最後の桁の底、mid =(左+右)/ 2を設定します
。2。探している数値と比較するために、常に半分に折ります(k)
3。 a [mid]> kの場合、midは明らかにkの左側、left = mid + 1です。a[mid] <kの場合、midは明らかにkの右側、right = mid-1です
。1、2を繰り返します。3ステップ、a [mid] = kの場合、数値kを見つけます。つまり、midの基本数値を出力します。

たとえば、a [10] = {1,2,3,4,5,6,7,8,9,10}配列内の数値を検索し、そのベースを出力します。
数値7が見つかった場合、出力にはベース6
表示されます。left= 0 、right = 9、mid =(left + right)/ 2 = 4、この時点でa [mid] = 5 <7、left = mid + 1 = 5
left = 5、right = 9、mid =(left + right) / 2 = 7、この時点でa [mid] = 8> 7、right = mid-1 = 7
left = 5、right = 7、mid =(left + right)/ 2 = 6、この時点でa [mid] = 7 = 7、
通常の検索方法を使用して出力を中央で検索すると、最初の位置から出力
を検索するのに7回かかるため、効率が大幅に低下します。

#define _CRT_SECURE_NO_WARNINGS 1
int main(){
    
    
	int a[10] = {
    
     1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	printf("请输入你想要的数字:");
	int k;
	scanf("%d",&k);//输入你想要的数字
	int left = 0;
	int right = 9;
	while (left <= right){
    
    //比较左右大小来得到想要数字的底数
		int mid = (left + right) / 2;
		if (a[mid] < k){
    
    
			left = mid + 1;
		}
		else if (a[mid]>k){
    
    
			right = mid - 1;
		}
		else{
    
    
			printf("它的底数是:%d\n", mid);
			break;
		}
	}
	if (left > right){
    
    
		printf("找不到奥!\n");
	}

	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_43885306/article/details/112982021