半搜索法也叫子搜索法。顾名思义,就是把数据分成两半,然后确定找到哪一半的键,然后重复上述步骤,直到找到目标键。下面这篇文章主要介绍C语言中半查找法的相关信息,有需要的朋友可以参考一下。
:
目录
1.二分搜索法简介1.1定义1.2基本原理1.3时间复杂度和空间复杂度1.4优缺点2。代码实现2.1代码设计2.2代码实现
1. 折半查找介绍
1.1 定义
半搜索,也称为二分搜索法,是一种在有序数组中查找特定元素的搜索算法。每次搜索范围缩小一半,效率高。如果数组是无序的,应该在搜索前对其进行排序。
1.2 基本原理
搜索过程从数组的中间元素开始。如果中间的元素正是要搜索的元素,则搜索过程结束。如果某个元素比中间的元素大或小,则在数组中比中间的元素大或小的那一半中进行搜索,并从中间的元素开始比较。如果数组在某一步是空的,说明找不到。这种搜索算法每次比较都将搜索范围缩小一半。
1.3 时间复杂度与空间复杂度
总共有n个元素,每次搜索的区间大小为n,n/2,n/4,…,n/2k2 K2K,一直到1,其中k为循环数。
由于n/2k2k2k四舍五入为1,即n/2k2k2k等于1,则可得k=log2n(是n以2为底的对数),因此时间复杂度可表示为O()=O(logn)。
二分搜索法只需要存储三个附加变量:最大值、最小值和中点,空间复杂度为常数O(1)。
1.4 优缺点
优点:比较次数少,搜索速度快,平均性能好。
缺点:需要检查的列表要求是有序列表,难以插入和删除。
2. 代码实现
2.1 代码设计
输入要查找的元素,我们输入了38;Left是有序数组最左边的0,是最小值,right是有序数组最右边的10,是最大值,mid是数组的1/2位置,即array[5];38大于array[5]=19,所以左等于原来的mid 1,即array[6]=26,右不变;新的mid是(左右)/2=(6 ^ 10)/2=8;38大于array[8]=36,所以左等于最后一个mid 1,即array[9]=38,右不变;新的mid是(左右)/2=(9 10)/2=9;/2=9;38等于数组[9],中间和左边重合,搜索成功,返回数组下标9。
2.2 代码实现
#包含stdio.h
#包含字符串. h
int binarySearch(int array[],int len,int target){
int left=0;
int right=len-1;
while(left=right){
int mid=(右左)/2;
if(array[mid]==target){
返回mid
} else if(array[mid] target){
左=中1;
} else if(array[mid] target){
右=中1;
}
}
return-1;
}
int main(void)
{
int array[]={2,3,4,5,15,19,26,27,36,38,45 };
int key=0,ret
Printf('请输入您需要查找的号码:');
scanf('%d ',键);
ret=binarySearch(array,sizeof(array)/sizeof(int),key);
if(ret 0)
Printf('查找失败\ n ');
其他
Printf('这个数字是数组的%d元素\n ',ret 1);
返回0;
}
运行结果:
请输入您需要查找的号码:38
这个数字是数组的第10个元素。
这篇关于C语言半查找的介绍和使用实例的文章到此为止。有关C语言半搜索的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。