胸怀万里世界, 放眼无限未来。这篇文章主要讲述二分法相关的知识,希望能为你提供帮助。
二分法顾名思义将一段序列一分为二,值得注意的是对于序列首先需先进行排序处理,后进行查找。
int main()
int nums[10] = 4, 5, 2, 10, 7, 1, 8, 3, 6, 9;
int i, j, temp;
//冒泡排序算法:进行 n-1 轮比较
for(i=0;
i<
10-1;
i++)
//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
for(j=0;
j<
10-1-i;
j++)
if(nums[j] >
nums[j+1])
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
【二分法】
#define _CRT_SECURE_NO_WARNINGS 1
#include <
stdio.h>
int main()
int arr[] =1,2,3,4,5,6,7,8,9,10 ;
int k = 6;
//查询的元素
int sz = sizeof(arr)/sizeof(arr[0]);
//计算元素个数
int left = 0;
//左下标
int right = sz-1;
//右下标
while (left<
=right)
int mid = (left + right) / 2;
if (arr[mid] >
k)
right = mid - 1;
else if (arr[mid] <
k)
left = mid + 1;
else
printf("找到元素下标为:%d\\n", mid);
break;
//找到了即跳出整个循环
if (left >
right)
printf("找不到!\\n");
return 0;
值得注意的是,mid可能人为计算是一个小数,但是代码中,会进行取整,arr[mid]是存在的。
推荐阅读
- Reflex WMS for Factory:服务于工业4.0的物流管理软件
- SAP WM 高阶之事务代码LX04里存储类型004的Load %
- linux之软连接和硬连接的区别
- Windows server 2016的安装网络配置
- SAP WM初阶LS07冻结Quant
- k8s部署-40-对POD进行重新认识(上)
- Exchange之日记功能
- 自动化,怎么能少了性能测试
- 几种常见的技术组件介绍——统一认证/单点登录/全局序列号/连接池/数据传输