#include<iostream>
#include<ctime>
#include<iomanip>
using namespace std;
int main ()
{
const int N=50;
int n,i=0,j=0,k=0,a[N],temp,x,top,bot,mid;
cout<<"请输入数组长度"<<endl;
cin>>n;
srand(time(NULL));//随机数种子
for(i=0;i<n;i++)
a[i]=10+rand()%(100-10+1);
for(i=0;i<n;i++)
cout<<setw(4)<<a[i];
cout<<endl;//冒泡排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
cout<<"从大到小排序为:"<<endl;
for(i=0;i<n;i++)
cout<<setw(4)<<a[i];
cout<<endl;
//折半查找重点重点,一定要掌握,此处为降序查找
top=0,bot=n-1;
cout<<"请输入要查找的数"<<endl;
cin>>x;//
while(top<=bot)
{
mid=(top+bot)/2;
if(x==a[mid])
{ k=mid;//记录找到的数下标,然后结束循环
break;
}
else
{
if(x<a[mid])//中间的数比x大,所以top往数组中数字小的方向移动,即往右移动,如果是降序则改为>号
top=mid+1;
else
bot=mid-1;
}
}//推出循环后判断top
if(top<=bot)
cout<<x<<"在数组中第"<<k+1<<"个位置"<<endl;
else
cout<<"没有此数"<<endl;
return 0;
}