算法思想:假设数据是按升序排序的,对于给定的值x,从序列的中间元素开始,如果中间元素正好等于x,则搜索过程结束;如果x大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
注意:使用折半查找要被搜索的数组必须是有序的
#include<stdio.h>
int halfFind(int a[], int low, int high, int num);//函数声明
int main() {
int a[] = { 1,2,3,4,5,6,7,8,9,10 }; //定义了一个一维数组
printf("%d", halfFind(a, 0, 9, 10));
return 0;
}
int halfFind(int a[], int low, int high, int num)
{
int mid = (high - low) / 2 + low; //求mid的值
if (low <= high)
{
if (num == a[mid])
{
return mid;
}
else if (num < a[mid]) //在前半部分查找
{
high = mid - 1;
halfFind(a, low, high, num);
}
else if (num > a[mid]) //在后半部分查找
{
low = mid + 1;
halfFind(a, low, high, num);
}
}
else
{
return -1; //如果找不到,则返回-1
}
}