本人为c语言初学者,这次分享的是有关二分法的见解,例如下题:
假设数组a中的数据是按由小到大的顺序排列的:
-12 0 6 16 23 56 80 100 110 115
从键盘上输入一个数,判定该数是否在数组当中,若在,输出该数并输出其序号。
#include"stdio.h"
#define M 10//宏定义一个数 ,因为数组中有10个数所以定义数值为10
int main()
{
int a[M]={-12,0,6,16,23,56,80,100,110,115};//列出定义数组
int n,low,mid,high,found;
//定义 输入(n), 底数(数组第一个数值), 中值(随便), 最高数(数组最后一个数值)
low=0,high=M-1,found=0;
printf("输入需要查找的数据:");
scanf("%d",&n);//输入所找数
//使用二分法建立循环 ,如下 :
while(low<=high)//当最底层数小于等于最高层数时
{
mid=(low+high)/2;//使中值为两数之和的一半
if(n==a[mid])//若中值为所求数
{ found=1;break;}//找到结果跳出循环
else if(n>a[mid])low=mid+1;//当n>mid的时候最低值取代中值
//又因为已确定mid值不为所求数,所以+1往后推一位
else high=mid+1; // 当n<mid的时候最高值取代中值
//又因为已确定mid值不为所求数,所以-1往前推一位
}
if(found==1){printf("已找到所需数据:%d\n 它的序列号为%d",n,mid);}
//最终输出目标
else {printf("无所需数据");}
}
仅为个人见解,如有错误请各位大佬多多指正,谢谢