首先通过二分查找法,在数组中查找是否存在所给定的数字,若可以找到,则在此数的前后再进行查看,看是否存在连续的一样的数字,进行统计。
程序如下:
#include<iostream>
using namespace std;
int BinarySearch(int a[],int n,int Number)
{
if(a==NULL||n<=0)
{
return -1;
}
int begin=0,end=n-1;
while(begin<=end)
{
int mid=begin+(end-begin)/2;
int count=0;
if(Number<a[mid])
end=mid-1;
else if(Number>a[mid])
begin=mid+1;
else
{
count++;
int mid2=mid; //很重要!!
while(a[mid-1]==Number)
{
count++;
mid--;
}
while(a[mid2+1]==Number)
{
count++;
mid2++;
}
return count>0?count:-1;
}
}
return -1;
}
//定义输出
void print(int result)
{
if(result==-1)
cout<<"数组中不存在这个数!!!"<<endl;
else
cout<<"在数组中出现了"<<result<<"次"<<endl;
}
int main()
{
int a[]={1,2,3,3,3,3,4,5,6,7,8,9,0};
int length=sizeof(a)/sizeof(a[0]);
int result10=BinarySearch(a,length,10);
print(result10);
cout<<endl;
int result3=BinarySearch(a,length,3);
print(result3);
cout<<endl;
system("pause");
return 0;
}
结果如下: