C语言题型之二分折半查找

创建一个包含十个数的数组,查找第k大的数。

现根据题意写出一部分代码

include<stdio.h>
int main()
{
    int arr={1,2,3,4,5,6,7,8,9,10}
int k=7;//要查找的数字
int i=0;
int sz=sizeof(arr)/sizeof(arr[])//求出数组的长度
//折半查找前提是数组有序。

首先要定位出数组最中间的数字定义为mid

看完整代码。

#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
     int left=0;
int sz=sizeof(arr)/sizeof(arr[0])
     int right=sz-1;
     int k;
     scanf("%d",&k);
     while(left<=right)
     {
        int mid=(left+right)/2;
        if(arr[mid]==k)
        {
          printf("%d",mid);
          break;
        }
       else if(arr[mid]<k)
        {
          left=mid+1;
        }
        if(arr[mid]>k)
        {
          right=mid-1;
        }
     }
     return 0;
}

while循环里边的意思是第一次求出mid;

如果正好等于K的值,就输出这个mid,并且同时break终止循环;

如果不相等,mid<k,那么我们要查找的范围是不是就从0到9变成了mid+1 到 9 了呢

如果mid>k,我们要查找的部分就变成了0到mid-1

一直循环,知道查出我们要找的k,不就完了。

还有疑问可以在评论区叙述。

欢迎大家访问我的gitee提取更多有趣代码。

https://gitee.com/two-moon-rock/first-bloodf.git

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贰月磐石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值