年初写了一些期末考试的试题,现在有空了拿来发一发,就是用C语言来实现二分查找法(也称折半查找法),就不过多的介绍二分查找法了。下面直接上代码.
二分查找法的介绍
二分查找法是一种效率比较高的查找算法。但是想使用二分查找法的一个前提条件就是线性表必须采用的是顺序存储结构,而且这个线性表中的元素必须是有序的,满足这两个条件才能使用二分查找法。
折半查找法效率高的原因:每一次查找之后,都能缩小下一次查找的范围为上一次查找的范围的一半,这样就能不想顺序查找一样,从头到尾遍历,一个元素一个元素的对比。
折半查找的步骤:
- 定义
- 2
二分查找法的图解
二分查找代码实现
#include <stdio.h>
int binary_search(int data[], int length, int searchNumber){
//记录查找次数
int search_count = 0;
//定义查找的范围,以及中间值mid
int low = 0, high = length - 1, mid = (high + low) / 2;
while(low <= high){
search_count++;
if(data[mid] < searchNumber){
//如果查找的值比mid指针指向的数字大,说明后续搜索会在mid的右边进行,将最小范围指针指向mid
low = mid + 1;
}else if(data[mid] > searchNumber){
//如果查找的值比mid指针指向的数字小,说明后续搜索会在mid的左边进行,将最大范围指针指向mid
high = mid - 1;
} else{
printf("查找到了,元素%d在数组中的第%d个位置,查找次数:%d\n",searchNumber, mid+1, search_count);
return mid+1;
}
//将mid重新指向范围的中间
mid = (high + low) / 2;
}
printf("没有找到数字:%d\n",searchNumber);
return 0;
}
int main(){
//数组的长度
int length = 10;
//准备数据
int data[10] = {1,3,5,7,9,11,14,24,68,98};
//打印数据
printf("数据:");
for(int i = 0; i < length; i++){
printf("%d\t",data[i]);
}
printf("\n");
//查找数字11
binary_search(data,length, 11);
//查找数字3
binary_search(data,length, 3);
//查找数字98
binary_search(data,length, 98);
//查找数字100
binary_search(data,length, 100);
}