4.27 1.9

发布时间 2023-04-27 14:19:37作者: 席

一、问题描述

N个有序整数数列已放在一堆数组中,利用二分法查找整数m在数组中的位置。若找到,输出其值,反之,输出“Not be found!”。

二、分析N个有序数应存放在数组中,根据数组下标的取值范围知指针 low 和 high 的初值分别为0N-1。除了三个指针变量low、high、mid 之外还需要一个变量(假设为 k)来记录下标,利用变量 k 的值来判断整数 是否在所给出的数组中。下面我们用示意图来表示二分查找的过程。假设一维数组中存储的有序数列为5 13 19 21 37 56 64 75 80 88 92要查找的整数为21。

根据二分查找方法可知指针 low和 high 最初分别指向元素5和92,由 mid= (low+high)/2知指针mid 指向元素56。

 

三、代码

#include<iostream>
using namespace std;
#define N 10
int main()
{
int a[N]={-3,47,9,13,45,67,89,100,180};
int i,k=-1,m;
cout<<"a数组中的数据如下:"<<endl;
for(i=0;i<N;i++)
cout<<a[i]<<endl;
cout<<"Enter m: ";
cin>>m;
for(i=0;i<N;i++)
if(m==a[i])
{
k=i;
break;
}

if(k>=0)
cout<<"m="<<m<<" "<<"index="<<k<<endl;
else
cout<<"Not be found! "<<endl;
}

四、结果