C语言查找算法 C语言二分查找算法的实现
的有关信息介绍如下:我就在这里用C语言讲解“查找算法”—— 二分查找(Binary Search);如果你有更好的建议,或者有疑惑,可以给我留言。如果你想了解其它算法,如冒泡排序等,在大学以及工作中必须掌握的算法,那么请关注或者收藏我,我将继续更新其它算法。
(图片取自互联网,如有侵权,请于我联系)
线性查找使用的条件:要求数据表已经排好序。
线性查找的工作原理:先将表的中间位置记录的关键字与查找关键字比较 ;
(如果两者相等,则查找成功)
(否则将表分成前、后两个子表,根据比较结果,决定查找哪个子表)
具体实现过程:第一步 输入数据
你可以直接将你所需要的数据存入数组,如int a = {1,2,3,4,5,6,7,8,9,10};
也可以通过循环输入
for(i = 0 ; i< n ;i++)
{
scanf("%d",&a[i]);
}
来实现数据输入数组;
具体实现过程:第二步 写循环
如果查找的某一次循环没有找到匹配的数据,那么就要将(下标最大值+1)或者(下标最小值-1)赋值给中间值mid ;
当下标最小值超过最大值时候,循环结束,及(low > high);
while(low <= high)是循环成立的条件。
具体实现过程:第二步 判断
如果循环找到了与你查找匹配的数据,那么就结束循环;
if(x == a[mid] )
{
printf("找到数字“6”。");
break;
}
注意:如果要查找你数据相同的个数,就用continue;
即:
if(x == a[mid] )
{
printf("找到数字“6”。");
counter++;//记录个数
continue;
}
C语言代码实现:
#include
int main()
{
int a = {1,2,3,4,5,6,7,8,9,10};
printf(" 查找数字“6”。\n");
int low = 1;
int high = 10;//数组的最大下标n-1
int x = 6; //需要查找的数字
int mid ;
while(low <= high)
{
mid = (low + high)/2 ;//下标的一半,int类型除法取整。
if(x < a[mid])
{
high = mid +1;
}
if(x == a[mid] )
{
printf("找到数字“6”。");
break;
}
else
{
low = mid -1 ;
}
}
return 0;
}
运行程序;成功截图如下;
二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。