折半查找法c语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
折半查找法c语言
折半查找法,又称二分查找法,是一种在有序数据集(顺序表/列表、数组等)中,快速查找指定值的高效算法。
折半查找法的思想是基于二分法思想,用“分而治之”的思想来快速查找指定值。
折半查找法是一种最常用的查找方法,它也被称为是一种“有序”查找,因为要查找的数据必须是已经排好序的。
实际上,折半查找法的实现只要将有序的数据列折半,一次比较即可将待查找的值与被折半的数据列比较,这样查找的过程会比较快捷。
下面就来介绍折半查找法的具体实现方式:折半查找法假设要查找的数据是一个有序数列,在这里以升序数列为例:
(1)先定义一个指向待查找序列低位的索引,称之为low;
(2)定义另一个指向待查找序列高位的索引,称之为high;
(3)首先用low与high计算中位索引 mid,将这个中位索引处的值与要查找的数据进行比较,如果相等,则搜索成功;
(4)如果不等,则根据要查找的数据与中位索引处的值的比较结果,将待查找的序列分为两部分,下次查找只要在其中一部分序列中继续进行折半查找即可。
有了上面的思路,我们就可以用c语言来实现折半查找法了。
代码如下:
#include<stdio.h>
int binary_search(int arr[], int n, int key)
{
int low, mid, high;
low = 0;
high = n-1;
while(low <= high)
{
mid = (low + high) / 2;
if(arr[mid] == key)
return mid;
else if(arr[mid] > key)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int res = binary_search(arr, 10, 7);
printf(res = %d res);
return 0;
}
以上就是一个最基本的折半查找法的实现,通过定义一个low、high和mid三个索引,在计算中位索引mid时,low和high 分别指向有序数列的低位和高位,根据判断条件,如果要查找的值等于中位索引处的数据,则查找成功,否则就用待查找的数据与中位索引处的数据进行比较,来确定下一次查找的范围。
通过折半查找法,在有序的数据中查找指定值时,能够大大提高查找的效率,而且,折半查找法也非常容易实现,但是,它也有一些缺点,它必须要求被查找的数据经过预先排序,否则它无法正常工作,这也是折半查找法无法替代顺序查找法的原因。
总之,折半查找法是一种高效的查找方法,在有序的数据集中,它可以让我们快速查找指定值,从而提高查找的效率。