バイナリ検索/バイナリ検索(この方法は順次配置にのみ使用されます)
アルゴリズムは数字を見つけるための効率的な方法です
假设n个数 次数=log2n 如找2的32次个数,只需要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;
}