折半查找(C语言)

如果所有数字按照某种顺序排列好就可以每次用中间位置的数字和要查找的数字做对比,这样一次可以排除一半的数字。

不断重复这个过程就可以很快找到目标数字的位置。

/*

 * 折半查找

 * */

#include 

int *half_search(const int *p_start, constint *p_end, int num)

{

   const int *p_start1 = p_start;

   const int *p_end1 = p_end;

   const int *p_mid = NULL;

   while (p_start1 <= p_end1)

    {

       p_mid = p_start1 + (p_end1 - p_start1 + 1) / 2;

        if (*p_mid == num)

       {

           return (int *)p_mid;

       }

       else if (*p_mid > num)

       {

           p_end1 = p_mid - 1;

       }

       else

       {

           p_start1 = p_mid + 1;

       }

    }

   return NULL;

}

int main()

{

   int arr[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};

   int num = 0, *p_num = NULL;

   printf("请输入一个你要查找的数字:\n");

   scanf("%d", &num);

   p_num = half_search(arr, arr + 9, num);

   if (p_num)

    {

       printf("找到的数字是%d\n", *p_num);

    }

   else

    {

       printf("没有找到\n");

    }

   return 0;

}


你可能感兴趣的:(数据结构与算法)