要求用c语言编写简单易懂

(1)创建一个非递减序列并使用折半查找的方法查找元素。已知序列中的元素如下:10、23、45、46、51、62、63、74、85、91、100、102.要求:查找算法执行两次,一次查找元素45,查找成功,返回45对应的下标值3;另一次查找失败,在主函数中输出提示信息。可能用到的算法:1.折半查找算法。2.主函数。

代码如下,二分法封装成函数:

#include <stdio.h>
//数组以升序排列时,二分法查找x
int binSearch(int x, int a[], int n)
{
    int low, high, mid;
    low = 0;
    high = n-1;
    while(low <= high)
    {
        mid = (low + high) / 2;
        if(x < a[mid])
            high = mid - 1;
        else if(x > a[mid])
            low = mid + 1;
        else
            return mid;
    }
    return -1;
}

int main()
{
    int a[12] ={10,23,45,46,51,62,63,74,85,91,100,102};
    int pos;
    int i=0,n;
    //查找两次
    for(i=0;i<2;i++)
    {
        printf("请输入你要查找的数:");
        scanf("%d",&n);
        pos = binSearch(n,a,12);//查找45
        if(pos >= 0)
            printf("%d所在的位置:%d\n",n,pos+1);
        else
            printf("没找到%d\n",n);
    }
    
    return 0;
}

#include "stdio.h"
void main()
{

    int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
    int left,right,mid;
    int num,cnt=0;
    printf("请输入你要查找的数据:");
    scanf("%d",&num);
    left = 0;
    right= 14;
    while(left<=right){
        //计算查找次数
        cnt++;
        //获取中间位置元素的下标
        mid = (left+right)/2;
        if(num<a[mid]){
            //往右找
            left=mid+1;
        }else if(num>a[mid]){
            //往左找
            right=mid-1;
        }else{
            //找到了
            printf("在第%d个位置找到了数据,共查找%d次\n",mid+1,cnt);
            break;
        }
    };
    if(left>right){
        printf("你要查找的数据不存在\n");    
    }
}