首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-10-21 
折半查找,不能输出的原因请大家帮我看看,此折半查找程序为什么不能输出?#includestdio.h #includestdli

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

#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 

热点排行