二分查找:二分查找的适用场景,零基础也能学会
这篇文章介绍了二分查找算法,其核心是在有序数组中通过比较中间元素,逐步缩小查找范围,快速定位目标。它适用于有序、大数据量、静态(少修改)且需快速查找的场景,如字典或配置文件。 查找过程通过左右指针`left`和`right`确定中间值`mid`,根据目标与中间值的大小调整指针:若中间值等于目标则找到;若目标更大,右移`left`;若更小,左移`right`,直至找到或范围无效。 Python迭代实现的核心代码通过`left <= right`循环,计算`mid = (left + right)//2`,边界处理确保数组为空或目标不存在时返回-1。时间复杂度为O(log n)(每次范围减半),空间复杂度为O(1)(仅用常数变量)。 关键细节包括处理重复元素需扩展遍历,单元素数组直接判断,找不到目标返回-1。二分查找的“减治”思想高效解决有序大数据的快速查找问题,是算法基础中的重要工具。
阅读全文二叉树:二叉树的三种遍历方式,递归实现超简单
这篇文章介绍了二叉树的三种经典遍历方式(前序、中序、后序),基于递归实现,核心是明确根节点的访问位置。 二叉树每个节点最多有左右子树,遍历即按特定顺序访问节点。递归是关键,类似“套娃”,函数自调用且范围缩小,直到遇到空节点终止。 三种遍历顺序区别:前序(根→左→右)、中序(左→根→右)、后序(左→右→根)。以示例树(根1,左2,右3;2的左4,右5)为例: - 前序遍历结果:1 2 4 5 3; - 中序遍历结果:4 2 5 1 3; - 后序遍历结果:4 5 2 3 1。 递归实现核心:终止条件(空节点返回)+ 按遍历顺序递归左右子树。通过明确根位置和递归逻辑,可清晰理解遍历过程。
阅读全文使用Python实现归并排序算法
归并排序基于分治法,核心分三步:分解(将数组拆分为左右子数组,直至单元素)、递归排序(各子数组递归排序)、合并(合并有序子数组为整体有序数组)。 以数组[3,1,4,2]为例,分解后递归排序各子数组,再合并为[1,2,3,4]。Python实现含合并函数(按序合并两个有序子数组)与递归排序函数(分解并递归调用合并)。 其特点:时间复杂度O(n log n),空间复杂度O(n)(需额外存储合并结果),为稳定排序(相等元素相对顺序不变)。
阅读全文使用Python实现堆排序算法
堆排序是利用堆数据结构的高效排序算法,时间复杂度稳定为O(n log n),空间复杂度O(1),适合大规模数据排序。堆是完全二叉树,父节点值≥(最大堆)或≤(最小堆)子节点值。数组中堆的索引关系:父节点i的子节点为2i+1、2i+2,子节点j的父节点为(j-1)//2。 核心操作包括:1. **Heapify**:调整以i为根的子树为最大堆,递归比较子节点并交换;2. **构建最大堆**:从最后非叶子节点(n//2-1)向上调整所有节点,确保整体满足最大堆性质。 排序流程:先构建最大堆,再反复交换堆顶(最大值)与堆尾元素,同时调用Heapify调整剩余元素为最大堆,最终得到有序数组。堆排序为原地排序,适用于大数据量场景。
阅读全文使用Python实现快速排序算法
快速排序基于“分而治之”思想,核心是选基准值分区并递归排序。基本思路:选基准值(如数组首元素),将数组分为小于和大于基准值的两部分,再递归处理子数组。 分区过程是关键:通过左右指针遍历,右指针左移找小于基准值元素,左指针右移找大于基准值元素,交换后继续,直到指针相遇,交换基准值到最终位置,完成分区。 Python实现中,`partition`函数确定基准位置,`quick_sort`递归处理左右子数组。测试代码验证了排序效果。 复杂度:平均O(n log n)(分区均衡),最坏O(n²)(如已排序数组且基准选首元素,可通过随机选基准优化)。 快速排序是高效实用的排序算法,广泛应用于实际场景,理解其分区逻辑和递归过程是掌握排序算法的关键。
阅读全文