#include<iostream>
using namespace std;
int s1[1002];
int temp;
void quick_sort(int left,int right)
{
if(left>right)
return ;
int i=left;
int j=right;
int temp=s1[left];
while(i!=j)
{
while(i<j && s1[j]>=temp) j--;//一定要是等于啊
while(i<j && s1[i]<=temp) i++;//一定要是等于啊
if(i<j)
{
swap(s1[i],s1[j]);
}
}
swap(s1[i],s1[left]);//这个是s1[i]和s1[left]交换。
quick_sort(left,i-1);
quick_sort(i+1,right);
}
int quick_res(int left,int right)
{
if(s1[right]==temp)//如果需要查找的值正好是数组的最后有一个,那么直接返回,这样写的原因是因为,查找最后一个发生了死循环;
return right;
int mid=(left+right)/2;//二分查找
if(temp==s1[mid])
return mid;
if(left==right-1 && temp!=s1[left] && temp!=s1[right])//因为left怎么也不会=right,进行此判断,如果没有找到就返回-1;
return -1;
if(temp<s1[mid])
{
quick_res(left,mid);
}
else
quick_res(mid,right);
}
int main()
{
int a,b,c,t,k;
cin>>k;
for(int i=1;i<=k;i++)
{
cin>>s1[i];
}
quick_sort(1,k);
for(int i=1;i<=k;i++)
{
cout<<s1[i]<<' ';
}
cout<<endl;
while(cin>>temp){
cout<<quick_res(1,k)<<endl;
}
return 0;
}
快排+二分
最新推荐文章于 2022-07-06 16:51:43 发布