用C语言实现 折半(二分)查找法
折半查找法,也称二分查找法。
其 实现要求 为:
1.数据必须为有序数列
(有序:指数据必须是连续递增或递减的排列)
2.存储结构一定为顺序存储
3.关键字大小必须有序排列
其 基本思想 为:
1. 将要查找的数据与有序数列里中间的元素进行比较,若相等,则找到,然后输出位置。
2. 若要找数据大于中间元素的值,则再从数组的后一半元素中进行查找;否则,就从数组的前一半元素中进行查找。
3. 若将数组全部折半完后仍找不到,则输出“没找到”。
下面来代码实现:
int main() {
int arr[10] = { 0 };
int n;//要查找的数据
int low=0, high=9, mid;//数组最左边,最右边,折半的中间
printf("请输入数组的数据值\n");//必须为有序(递增,减)数列
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
printf("请输入要查找的数据\n");
scanf("%d",&n);
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid] > n)//中间值大于要查找数据,则数据在前半部分
{
high = mid - 1;
}
if (arr[mid] < n)
{
low = mid + 1;
}
if (arr[mid] == n)
{
printf("%d为数据所在位置\n", mid);
break;
}
}
if (low > high) {
printf("没有找到\n");
}
return 0;
}