快排之后查找
需求
输入一个无序数组,以及一个需要查找的值 输出找没找到
分析
二分查找非常经典,但需要先给数组排序,我使用的是快速排序
Code
#include <bits/stdc++.h>
using namespace std;
//快速排序
void qsort(int a[],int le,int ri){
int mid = a[(le+ri)/2];
int i=le,j=ri;
while(i<=j){
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}
if(le<j) qsort(a,le,j);
if(ri>i) qsort(a,i,ri);
}
//二分查找
bool binaryFind(int a[],int need,int len){
bool res=false;
int le=0,ri=len;
int mid;
while(le<=ri){
mid=a[(le+ri)/2];
if(need>mid) le=(le+ri)/2+1;
else if(need<mid) ri=(le+ri)/2-1;
else{
res=true;
break;
}
}
return res;
}
int main(){
int n,a[10005];
memset(a,0,sizeof(a));
cout<<">";
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
qsort(a,0,n-1);
int need;
cin>>need;
binaryFind(a,need,n-1)?cout<<"found":cout<<"not exits";
return 0;
}