#include <stdio.h>
int main(void) {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);//元素个数
int Number = 5;//需要查找的值
int right =sz-1;//右下标
int left = 0;//左下标
while (left<=right){
int half = (right + left) / 2;
if (arr[half] < Number) {
left = half + 1;
}
else
if (arr[half] > Number) {
right = half - 1;
}
if(arr[half]==Number) {
printf("TURN!WE FOUND!");
break;
}
if (left >= right) {
printf("OH!NOT FOUND!");
break;
}
}
return 0;
}
二分查找法
- 二分查找法,是在有序数组内查找元素的算法,在每次查找时,找整个数组的中间值。
- 如果中间值与查找的目标值相同,则结束查找。
- 若中间值大于目标值,则搜索目标去掉已经查找到的中间值和中间值左边的所有值,继续取中间值搜索。
- 若中间值小于目标值,则搜索目标去掉中间值和中间值右边所有值,继续取中间值搜索。
左右下标
- 左边标初始恒为0
- 右下标初始为元素个数减一,因为数组恒为由0下标开始的顺序,而元素个数一般恒不为0。因此逻辑可得。
中间值
- 若要以代码形式来求一个数组所有元素的中间值,那么就需要将左下标和右下标放在开始与结束的位置。
- 之后,将左右下标在数组中代表的元素相加,整体除二就能实现了。
算法实现
- 依据二分查找法的定义,写下符合概念逻辑的代码的语句。
- 但是会发现,如果无法查找的目标,将会无尽循环。(在不知道需要循环多少次的情况下,使用真为条件循环,遇到break才能跳出循环。)
- 当左右下标相对指向并相遇以后继续执行,那么依逻辑可知,在数组中没有需要查找的元素。就是无法查找到元素,那么就需要设置条件,左下标恒小于等于右下标。
最后
- 使用文字说明阐述元素是否查找到,并且查找到的元素是什么。