Beispiel #1
0
int HalfSearch(int a[], int m, int n,int key)
{
	int k;
	int flag = 0;
	if (a[m] == key)
	{
		return flag = m+1;
	}
	if (a[n] == key)
	{
		return flag = n+1;
	}
	if (key > a[n] || key < a[m])
	{
		return 0;
	}
	k = (m+n)/2;
	if (a[k] == key)
	{
		return flag = k+1;
	}
	if (a[k] > key)
	{
		return flag = HalfSearch(a,m+1,k-1,key);
	}
	if (a[k] < key)
	{
		return flag = HalfSearch(a,k+1,n-1,key);
	}
	return 0;
}
Beispiel #2
0
int main( void )
{
    int n, m;

    while ( scanf("%d", &n) != EOF )
    {m = HalfSearch( n );

    if ( m != -1 )
        printf("查找成功!元素%d位于该数组的第%d个位置.\n", n, m);
    else
        printf("查找失败!该数组没有元素%d.\n", n);}

    return 0;
}
Beispiel #3
0
int main(){
  
  int arr[LEN] = {18,15,1,2,19,20,3,12,13,14,20,15,20,4,5,6,7,16,17,10,15,8,9,10,11,20};
  int i,index;

  printf("array for search:\n");
  for(i = 0; i < LEN; i++){
    printf("%d ",arr[i]); 
  }
  
  index = HalfSearch(arr,0,LEN-1,19);

  printf("\nindex of 19:%d\n",index);
}
Beispiel #4
0
int main(void)
{
	/*递归的折半查找算法*/
	int flag;
	int key;
	int arr[10] = {2,3,5,7,8,10,12,15,19,21};
	printf("请输入要查找的项:");
	scanf("%d",&key);
	flag = HalfSearch (arr,0,9,key);
	if (flag)
	{
		printf("所查找的数%d位于第%d个\n",key,flag);
	}
	else
	{
		printf("没有所要查的数。\n");
	}
	getch();
	return 0;
}
Beispiel #5
0
int HalfSearch(int arr[], int low, int high, int num)
{
  int mid;
  mid = (low+high) / 2;
  if( (low>=high) && (arr[mid]!=num) ){
    return -1;
  }
  else
  {
    if(arr[mid]==num){
      return mid;
    }
    else if(arr[mid]>num){
      high = mid-1;
    }
    else{ 
      low = mid+1;
    }
    return HalfSearch(arr,low,high,num);
  }
}