| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> acwing算法基础课笔记 -> 正文阅读 |
|
[数据结构与算法]acwing算法基础课笔记 |
第一章 基础算法(一): 一、快速排序: 2.将数组分为左右两边,左边全为比分界点小的数,右边全为比分界点大的数, 代码实现:
y总代码: 上图29行:改为;,31行l,r改为0和n-1,33行将取地址符&去掉。 ?3.然后分别对左右两边进行递归排序。 tips: *若选取的为q[l],则底下两个递归为l,j和j+1,r; 为q[r]则为l,i-1和i,r;是互相对称的。 *选q[l],不能用i,只能用j,反之也是一样,,因为这会导致死循环。 较为建议选取q[(l+r)/2]; *(l+r)/2也可以写为(l+r)>>1,即除二取整。 *当输入数据较多时,选择较快的读取方式,在c++中我们选择scanf来进行快速读取。 二、归并排序 1.找分界点 2.递归排序左右两边,将数组分成左右两个有序的数组 3.归并,将两个数组合并成一个有序的数组,通过比较大小插入到一个新的数组中去。 代码实现:
y总代码: ?tips: 快排,归并,与sort速度差不多; 三、二分法查找边界 二分的实质是寻找边界,使用二分法一定能找到边界,至于边界是否与题意有关是否满足不在考虑之内。 整数二分概念图: ?因为整数除以是向下取整的,并且边界问题考虑在内,所以我们在使用时需要注意加一减一问题。做题时通过画图思考mid值是否满足要求来确定加一减一。 代码实现:
y总代码: ?tips: *若减一则应该在mid计算时加一,否则可能会出现死循环。 *做题时建议直接写mid=l+r>>1;再根据后面判断是否加1; 浮点数二分:不用考虑边界问题,浮点数除以没有取整问题。直接取mid就好,终止条件可为区间长度小于1e-6等; 经验:若结果取四位小数,则为1e-6,若五位小数,则为1e-7;大二即可较精确。 ?eg:求平方根问题:(判断条件也可不写区间长度,直接暴力重复100次也可) ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:51:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |