现在的位置: 首页 > 综合 > 正文

数据结构与算法-折半查找(二分查找)

2013年09月08日 ⁄ 综合 ⁄ 共 1053字 ⁄ 字号 评论关闭

//递归查找
#include <stdio.h>
int main()
{
 int BinarySearch(int low, int high, int num);
 int n, y;
 printf("请输入要查找的数:");
 scanf("%d",&n);
 y = BinarySearch(1, 11, n);
 if(y < 0)
 {
  printf("查找失败!\n");
 }
 else
 {
  printf("查找成功!\n");
  printf("%d\n",y);
 }
 return 0;
}

int BinarySearch(int low, int high, int num)
{
 int a[11]={5,13,19,21,37,56,64,75,80,88,92};
 int mid;
 if(low > high)
 {
  return -1;
 }
 mid = (low + high) / 2;
 if(a[mid] == num)
 {
  return mid;
 }
 else if(a[mid] < num)
 {
  return BinarySearch(mid + 1, high, num);
 }
 else
 {
  return BinarySearch(low, mid - 1, num);
 }
}
//非递归查找
#include <stdio.h>
int halffind(int a[], int num, int key)
{
 int low = 0;
 int mid;
 int high = num - 1;
 if(low > high)
 {
  return -1;
 }
 while(low <= high)
 {
  mid = (low + high) / 2;
  if(key == a[mid])
  {
   return mid;
  }
  if(key > a[mid])
  {
   low = mid + 1;
  }
  if(key < a[mid])
  {
   high = mid -1;
  }
 }
 return -1;
}
int main()
{
 int n, key_mid;
 int b[11] = {5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92};
 printf("enter the key:");
 scanf("%d",&n);
 key_mid = halffind(b, 11, n);
 if(key_mid != -1)
 {
        printf("The find is successful!\n");
        printf("%d\n",key_mid);
 }
 else
 {
        printf("The find is wrong!\n");
 }

}

抱歉!评论已关闭.