在⼀个升序的数组中查找指定的数字n,很容易想到的⽅法就是遍历数组,效率是非常低的;
如:猜数字游戏,你需要从100个数字中找到,出数的人想的那个数字,1,2,3,4,5......;
这样是非常慢的,如果数字在大亿点点,非常难找;
这里可以:先选择50,判断大了还是小了,在从25或者75,这样需要判断的次数就少了。
这样的方法就叫做二分查找也叫折半查找;
首先基础要素
int main() { return 0; }
需要数组将大量的数据装入
arr[]用来寻找和控制小标(left , right , mid)
你所要找寻的数字 k= ?
搬出代码
我们是利用mid的下标进行分开,这样就减少了遍历所带来的时间过长的影响
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int find=0; int left=0; //左下标 int mid; //中间用来作为二分的值 int arr[] = {1,2,3,4,5,6,7,8,9,10}; int right = sizeof(arr) / sizeof(0) - 1; //计算数组的长度,又因为数组是从0开始,所以减去一个一 int k = 4; //查找的数 while(left <= right) { mid = (left + right) / 2; if (arr[mid]>k) { //判断arr[mid]与k的大小,从mid位置分开 right = mid-1; } if (arr[mid] < k) { left = mid + 1; } else { find += 1; //采用一个值来判断是否找到 break; } } if (find = 1) { printf("找到了,下标是%d\n",mid); } else { printf("没有找到"); } return 0; }
对你来说超简单的,留个赞走吧