C语言实现折半查找,给定任意一个num值,查找是否在序列之中,如果在返回其位置,若不在则输出“查找失败“
作者:互联网
c语言实现二分查找
- 什么是二分查找:
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 - 二分查找的工作原理:
简单来说就是不断比较判断序列下标为mid对应的值是否等于输入的值,不断缩小查找范围额,等于则跳出循;以下为例:
int arr[10] = {1, 3, 4, 5, 6, 7, 8, 9, 10, 13};
对于这个序列,我们想要查找数:num=5;
初始数据low=0;high=9(数组位数-1,数组下标从0开始)
mid=(low+high)/2 向下取整 也就是4;
通过比较arr[mid]==num,此时arr[mid]对应的值为6;6>5则该表high的值:high=mid-1;此时low=0,high=3;这样查找范围就变小了。反之改变low的值为low=mid+1;以此类推,这样就能找到你想要查找的值了。
while (low <= high)
{
mid = (low + high) / 2;
if (arr[mid] == num)
{
printf("这个数的下标位置在%d上", mid+1);
break;
}
else if (arr[mid] < num)
low = mid + 1;
else
high = mid - 1;
}
- 完整代码
#include<stdio.h>
void halfFound(int arr[],int num){
int low=0;int high=9;
while (low<=high)
{
int mid=(low+high)/2;
if (num==arr[mid]){
printf("这个数的位置是:%d",mid+1);
break;
}
else if(num>arr[mid])
low=mid+1;
else
high=mid-1;
}
if (low<=high);
else
printf("查找失败!");
}
int main(){
int num;
int arr[10] = {1, 3, 4, 5, 6, 7, 8, 9, 10, 13};
printf("请输入你想要查找的数:\n");
scanf("%d",&num);
halfFound(arr,num);
}
4.结果演示:
标签:折半,arr,num,mid,high,查找,low 来源: https://blog.csdn.net/aiyalhh/article/details/121949547