文章目录
-
前言
-
一、什么是二分查找?
-
二、使用步骤
-
1.判断
-
2.查找思路
-
-
三、例题及详细代码
-
四、总结
前言
最近一直在力扣上刷二分查找的题目,对二分查找有了进一步的了解。现与大家分享分享。
一、什么是二分查找?
二分查找又称折半查找法,是一种效率较高的查找方法,缺点是查找的数据必须有序的。
二、使用步骤
1.判断
判断所求数列是否为有序的,若为无序的需要先进行排序,再进行查找。
2.查找思路
先定义 left=0,right=n-1 (n为序列的长度),再确定中间位置mid=left+(right-left)/2 的数据,然后将mid与所查找的数据进行比较,若相等,则查找成功,若查找的数据大于mid,则right=mid-1;若查找的数据小于mid,则left=mid+1,直到找到所查找的数据。
3.例题及详细代码
在下列数组{2,4,7,8,10,11,14,19,30,40}中,寻找某一数值。
#include <stdio.h>
int BinSearch(int a[], int n, int target){
int left = 0,right=n-1,mid;
while(left<= right){
mid=left+(right-left)/2;
if(a[mid]<target)
left= mid + 1;
else if(a[mid]>target)
right = mid - 1;
else if(a[mid]==target){
printf ("以找到该数值,数组下标为%d\n",mid);
return mid;
}
}
return -1 ;
}
int main(){
int m, key;
int a[10]={2,4,7,8,10,11,14,19,30,40};
for(int i=0; i<10; i++){
printf("%d\t", a[i]);
}
printf("\n请输入你所要查找的数据:");
scanf("%d",&m);
key = BinSearch(a,10,m);
if(-1 == key)
printf("没有查找到 \n");
return 0;
}
总结
二分查找是一种经典的算法,简单易学,为我们提供了一种快速便捷地查找的方法,但是时间复杂度为O(log2n),效率不高。