学习了C语言的二分算法,学写了一个查找有序数组的代码。
代码如下:
#include <stdio.h>
/*折半算法(或二分算法)进行有序数字查找*/
void FoundNumbers(){
int arr[]={1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20};
int k=0;
printf("[请输入您要查找的数字]");
scanf("%d", &k);
int sz=sizeof(arr)/sizeof(arr[0]); // 计算数组的元素个数
int left=0;
int right=sz-1; // 最后元素的下标是sz-1
while (left<=right)
/*在查找时,左侧的坐标一般只会小于右侧的坐标*/
{
int mid=(left+right)/2;
/*通过判断来修正坐标,类似数字炸弹的玩法*/
if (arr[mid]>k)
right=mid-1;
else if (arr[mid]<k)
left=mid+1;
else
{
printf("[已找到%d,下标为%d]\n", k, mid);
break;
}
}
/*当左侧坐标大于右侧坐标时,数字无法找到。
因为当mid正好是最后一个元素时,left和right
会因mid-1和mid+1而反转*/
if (left>right)
printf("[未找到%d]\n", k);
}
int main(){
while (1)
{
FoundNumbers();
}
}
此代码学习于B站鹏哥鹏老师的C语言课程。