[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
原理. 二分查找又称折半查找,只适用于有序数组。. 二分查找原理很简单,针对有序数组的查找效率也很高。.
具体原理为,每次拿目标数值k表示)与数组中间位置的数据(以下用a [mid]表示,mid表示数组中间位置索引值)进行比较,如果k大于a [mid],继续将k与大于a [mid]部分的中间位置的值进行比较;如果k小于a [mid],继续将k与小于a [mid]部分的中间位置值进行比较。.
注:对于无序数组,若先进行排序,再使用二分查找,这种方法虽然可以实现查找,但是会改变最原始数组的元素位置,所以针对无序数组,最好用基本的查找算法实现
#include<stdio.h> int main() { int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
int left = a[0]; int sz = sizeof(a) / sizeof(a[0]); //计算数组大小 int right = a[sz -
1]; //使右值等于最后一个数字 int k = 12; //要查找的数是12 int mid; while (left<=right)
//当左值小于=右值的时候进入循环,左值大于右值退出循环 { mid = (right + left) / 2;// 中间值等于左值加右值再除2 if (k
< mid) { right = mid-1; //如果要找的数字小于mid,使右值等于mid-1 } else if (k > mid) { left =
mid + 1; //如果要找的数字大于mid,使左值等于mid+1 } else { printf("找到了,下标是:%d", mid - 1);
//如果要找的数字等于mid则找到了 break; } } if (left > right) //当左值大于右值时,就说明找不到
printf("找不到"); return 0; }