二分查找和辗转相除法

二分查找

无序的数组不能进行二分查找,升序或者降序可以

cpp 复制代码
#include<stdio.h>
int main() {
	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;//k为要在数组中找的数
	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);
	int flag = 0;
	int left = 0;
	int right = sz - 1;
	while (left <= right) {
		int mid = (left + right) / 2;
		if (a[mid] < k)
		{
			left = mid + 1;//因为原数组是升序,所有mid小于k就要往后面进行二分查找
		}
		else if (a[mid] > k)
		{
			right = mid + 1;

		}
		else
		{
			flag = 1;
			printf("找到了,下标是%d\n", mid);
			break;
		}

	}
	if (flag == 0)
		printf("找不到了\n");
	return 0;
}

查找数组中一个元素的下标

strlen不算\0,下标从0开始所以求最后一个元素下标要-1

sizeof算\0,下标从0开始所以要-2

辗转相除法求最大公约数

cpp 复制代码
#include<stdio.h>
int main()
{
	int a = 24;
	int b = 18;
	int c = a % b;
	while (c != 0)
	{
		a = b;
		b = c;
		c = a % b;
	}
	printf("%d\n", b);
	return 0;
}

一个关键数学结论:两个数的最大公约数,等于其中较小数与两数之差的最大公约数

进一步优化(避免多次减法):两个数的最大公约数,等于其中较小数与两数相除余数的最大公约数

c一直存放余数,a一直存放较大的数,b一直存放较小的数

函数的设计应追求高内聚低耦合

模块之间要紧密相关,形成一个高效的功能单元

完成一个功能可能需要多个模块一直完成,我们期望模块与模块之间不要有太强关联(即独立)

相关推荐
WolfGang00732112 小时前
代码随想录算法训练营 Day39 | 动态规划 part12
算法·动态规划
阿Y加油吧12 小时前
动态规划经典题解:最长递增子序列 & 乘积最大子数组
算法·动态规划·代理模式
f3iiish12 小时前
3783. 整数的镜像距离 力扣
算法·leetcode
Not Dr.Wang42212 小时前
基于matlab的控制系统奈氏图及其稳定性分析
数据结构·算法·matlab
闻缺陷则喜何志丹12 小时前
【排序 离散化 二维前缀和】 P7149 [USACO20DEC] Rectangular Pasture S|普及+
c++·算法·排序·离散化·二维前缀和
rainbow72424412 小时前
AI学习路线分享:通用型认证与算法认证学习体验对比
人工智能·学习·算法
君义_noip13 小时前
信息学奥赛一本通 4163:【GESP2512七级】城市规划 | 洛谷 P14921 [GESP202512 七级] 城市规划
c++·算法·图论·gesp·信息学奥赛
Simon_lca13 小时前
验厂不翻车!Acushnet 11 项核心政策 + 自查要点,一文搞定
大数据·人工智能·经验分享·算法·制造
智者知已应修善业13 小时前
【51单片机按键控制流水灯+数码管显示按键次数】2023-6-15
c++·经验分享·笔记·算法·51单片机
汉克老师13 小时前
GESP2023年12月认证C++三级( 第三部分编程题(1、小猫分鱼))
c++·算法·模拟算法·枚举算法·gesp三级·gesp3级