读书人

折半查找不能输出的原因解决思路

发布时间: 2013-10-21 17:02:52 作者: rapoo

折半查找,不能输出的原因
请大家帮我看看,此折半查找程序为什么不能输出?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 15
int isearch(int a[], int n, int x);
void kuaisu(int *a, int n);
void quick(int *a, int left, int right);

int main()
{
int arr[N],x,n,i;
srand(time(NULL));
for(i=0;i<N;i++)
{
arr[i]=rand()/1000+100;
}

kuaisu(arr,N);

printf("输入要查找的数:");
scanf("%d", &x);
n=isearch(arr,N,x);

printf("\n数据序列:\n");
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
printf("\n\n");
if(n<0)
printf("没有找到数据:%d\n",x);
else
printf("数据:%d位于数组的第%d个元素处。\n",x,n+1);
system("pause");
return 0;
}

void kuaisu(int *a,int n)
{
quick(a,0,n-1);
}

void quick(int*a, int left, int right)
{
int f, l, r, t;
l=left;
r=right;
f=a[(left+right)]/2;
while(l<r)
{
while(a[l]<f)
--r;
while(a[l]>f)
--r;
if(l<=r)
{t=a[l];a[l]=a[r];a[r]=t; ++l; --r;}
if(l==r) l++;
if(left<r)
quick(a,left,l-1);
if(l<right)
quick(a,r+1,right);
}
}
int isearch(int a[],int n,int x)
{
int mid,low,high;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x)
return mid;
else
if(a[mid]>x)
high=mid-1;
else
low=mid+1;
}

return -1;
}

[解决办法]
a[l]<f??
[解决办法]
输入一个小尺寸的数组,debug

读书人网 >C语言

热点推荐