关于二分查找的一个小问题
  • 板块灌水区
  • 楼主Krisinsonia318
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/9/6 20:57
  • 上次更新2023/11/4 07:22:07
查看原帖
关于二分查找的一个小问题
428444
Krisinsonia318楼主2021/9/6 20:57

二分查找,速度很快,为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)

2021/9/6 20:57
加载中...