2.搜索与排序
文章平均质量分 95
排序和一些简单的搜索
B1acktion
潮起潮落,云卷云舒。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2.1.冒泡排序——从入门到面试,彻底搞懂这道“最简单“的题
本文全面解析冒泡排序算法,从基础原理到优化进阶。冒泡排序通过相邻元素比较交换,使较大元素逐步"上浮"至正确位置。文章详细演示了排序过程,分析了时间复杂度(最好O(n),最坏O(n²))和稳定性(稳定)。提供了Python和C++实现代码,并介绍三种优化方法:提前终止、记录交换位置和双向冒泡(鸡尾酒排序)。作为基础排序算法,冒泡排序虽然效率不高,但能帮助理解排序本质和算法优化思路。原创 2026-04-01 22:58:44 · 470 阅读 · 0 评论 -
2.2.选择排序——每轮找最小,为什么交换更少却反而不稳定?
选择排序核心思想与特点 选择排序通过逐轮扫描未排序区间找到最小值并交换到前面,每轮确定一个元素的最终位置。其特点是: 时间复杂度固定为O(n²),比较次数不受数据初始顺序影响 交换次数少(O(n)),但比较次数多 不稳定排序,交换可能破坏相等元素的相对顺序 难以优化,必须完整扫描才能确认最小值 空间复杂度O(1),属于原地排序 典型应用场景是对交换成本高、比较成本低的数据进行排序。虽然效率不高,但思路简单直观,适合教学和小规模数据排序。原创 2026-04-01 23:08:33 · 377 阅读 · 0 评论 -
2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?
插入排序是一种基础排序算法,通过将每个元素插入到前面已排序部分的正确位置来工作。其时间复杂度在最坏情况下为O(n²),但对近乎有序的数据只需O(n)。算法稳定且原地操作,适合小规模数据。插入排序的优势在于能高效处理部分有序数组,实际工程中常被用作其他排序算法的小区间优化策略。原创 2026-04-02 12:49:00 · 581 阅读 · 0 评论 -
2.4.快速排序——先分区再递归,为什么它平均这么快却可能退化?
快速排序是一种高效的分治排序算法,通过选取基准值将数组分为左右两部分(左边≤基准,右边≥基准),然后递归处理子数组。其平均时间复杂度为O(n log n),但在最坏情况下(如数组已有序)会退化到O(n²)。随机化选择基准值能有效避免退化,提高实际性能。快速排序的优势在于原地排序和良好的缓存局部性,使其成为实践中常用排序算法。代码实现包括分区和递归两个核心步骤,通过边界指针i和扫描指针j完成元素交换,最终确定基准位置。原创 2026-04-02 16:53:41 · 900 阅读 · 0 评论 -
2.5.归并排序——分而治之再合而并,为什么它能稳定保持 O(n log n)?
归并排序是一种基于分治思想的稳定排序算法,其核心思想是将数组不断拆分为子数组直至长度为1(天然有序),然后通过合并两个有序子数组实现排序。该算法的时间复杂度稳定为O(n log n),因为每次递归分解问题规模减半(log n层),而每层合并操作耗时O(n)。归并排序的优势在于稳定性、可靠的最坏情况性能,特别适合链表排序和逆序对统计等场景。相比快速排序,它不受数据分布影响;相比堆排序,它能保持稳定性。实现时需注意递归拆分和有序合并两个关键步骤。原创 2026-04-03 09:46:51 · 632 阅读 · 0 评论 -
2.6.堆排序——从堆结构到 Top-K,一套思路贯穿排序与选择
摘要 堆排序是一种基于二叉堆结构的排序算法,时间复杂度稳定为O(n log n)。它分为两个阶段:首先将无序数组构建为大顶堆,然后反复将堆顶最大值与末尾元素交换并下沉调整。堆排序不仅能高效排序,还可解决Top-K选择问题,其核心在于维护堆结构的不变性——每个节点不小于其子节点。算法从最后一个非叶子节点开始自底向上建堆,再通过反复交换堆顶元素并下沉实现排序。堆排序的优势在于统一了排序与选择问题的解决思路,适用于需要动态获取最值的场景。相比快排和归并排序,堆排序在空间复杂度(O(1))和稳定性(不稳定)方面具有原创 2026-04-03 15:28:57 · 445 阅读 · 0 评论 -
2.7.希尔排序——让插入排序先大步走,再小步收尾
希尔排序是插入排序的优化版本,通过先进行大跨度的元素调整,再逐步缩小间隔,最终用插入排序收尾。这种方法能显著减少小元素远距离移动的次数,提高排序效率。其时间复杂度取决于步长序列的选择,通常在O(n log n)到O(n²)之间。虽然希尔排序不稳定且复杂度不如快速排序等算法优秀,但实现简单且在小数据量下表现良好,适合作为插入排序的优化替代方案。原创 2026-04-04 21:14:08 · 418 阅读 · 0 评论 -
2.8.计数排序——不比大小,先统计再还原为什么能线性完成?
计数排序是一种非比较排序算法,通过统计元素出现次数实现线性时间复杂度。它适用于整数数据且值域范围较小的情况。算法步骤如下:1)统计元素频次;2)根据频次还原有序序列。稳定版本通过前缀和和逆序回填保持相同元素的原始顺序。时间复杂度为O(n+k),空间复杂度O(k),其中n为元素个数,k为值域范围。计数排序是桶排序和基数排序的基础,特别适合小值域整数排序。典型应用如LeetCode 75题颜色分类问题。原创 2026-04-04 21:26:53 · 383 阅读 · 0 评论
分享