c语言二分查找比较大小,可能是史上最全的二分查找汇总【c语言版】

在自学二分查找的过程中我想到了一些变化问题,有的自己就慢慢理解了,有的在网上找到了答案,奈何没有找到想要的总结归纳。我就斗胆自己写了一篇,号称史上最全。希望和我一样的蒟蒻可以少走一点弯路。

二分查找凭借其低时间复杂度O(log(n))成为了各个蒟蒻的入门知识,但是其衍生出的各种题目相较原题目而言就没有那么容易求解,以下借用c语言实现二分查找算法及其衍生。二分查找仅适用于事先已经排好序的顺序表。其基本思路就是每次取中间数,如果中间数大于所求数就向上查找,反之向下。

一.原始二分查找

1.在有序数组中寻找一个数所在下标。

int main(){

int arr[] = {1,2,3,4,5,6,7,8,9};

int left,right,fin;

fin = 3;

left = 0;right = sizeof(arr)/sizeof(arr[0])-1;

while(left <= right) {

int mid;

mid = (left+right) / 2;

if (arr[mid] == fin) {

printf("找到了:%d\n", mid);

return 0;

}

if (mid < fin)

left = mid+1;

else if (mid > fin)

right = mid-1;

}

printf("没找到");

return 0;

}

对于这种基本的排序问题,我们通过判断mid变量与key的大小对有序数组进行二分。

当查找过程中,会出现key值下标坐落在left或right上时的情况,

以下用left举例

当left = key时,一个显然的结论,此时arr[mid]无法等于key。其所作工作为减小right,进一步缩进范围,直到right = left或right = left+1,此时范围缩小到最小,mid = left。输出mid的值即为所求下标。

我们当然可以在left和right = key时直接输出key的下标,但是这样会造成多次比较。

二.二分查找的变化之数组元素重复

对于二分查找而言,会出现数组元素重复的情况,以下问题的求解建立在数组元素重复的情况下:

1.返回匹配数key的最小下标

#include int main() {

i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值