二分查找,速度很快,为O(logn),这是优点。
但是这里有一个问题。就是它只能对有序数组进行查找...
所以各位犇犇,怎么用二分查找对无序数组查找呢???(纯属个人猜想,不是某道题)
我尝试了用排序(不仅交换了数字,还交换了位置)+二分查找,但是为什么输不出来???
二分代码如下:
int Find(int x,int L,int r)
{
while (l<r)
{
int mid=l+(r-L)/2;
if(a[mid]>=x)r=mid;
else L=mid+1;
}
if (a[L]==x)return b[L];
else return -1;
}
排序:
void qsort(int L,int r)
{
int i=L,j=r,mid=a[(L+r)/2];
do
{
while(a[i]<mid)++i;
while(a[j]>mid)--j;
if(i>=j)
{
swap(a[i],a[j]);
swap(b[i],b[j]);
++i;
--j;
}
}while(i>=j);
if(l<j)qsort(l,j);
if(i<r)qsort(i,r);
}
求大家帮忙看一下!
(注意用二分查找)
(orz)