数据结构与算法
文章平均质量分 95
各种算法与数据结构的知识都在此处
小菠萝的IT之旅
这个作者很懒,什么都没留下…
展开
-
面试碰壁后,我一口气总结了所有常见的排序算法!
排序算法在面试中是面试官考察候选人的基础知识点,重要性不言而喻,所以,今天就把常见的排序算法都好好温习一遍吧!排序算法的过程会以动图形式展现出来,并且给出伪代码和两种语言(Java、Python)的实现代码,重点在:快速排序、堆排序、归并排序排序算法总览图排序算法分类排序算法可以分为两大类:比较类排序,非比较类排序比较类排序:比较元素之间的相对次序进行排序,算法的时间复杂度最优是O(NlogN),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素的相对次序,最优时间复杂度是.原创 2021-04-16 08:44:01 · 748 阅读 · 1 评论 -
图文并茂!一文教你掌握十大排序算法之堆排序
1. 堆排序算法原理堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。它的最好、最坏和平均时间复杂度都为O(N*logN),它是一种不稳定排序,下面了解堆这种数据结构。堆是一种特殊的完全二叉树,分为大顶堆和小顶堆;在原有的二叉树的性质上,大顶堆还需要严格保证父节点的值大于等于孩子节点的值;小顶堆则严格保证父节点的值小于等于孩子节点的值。堆只是一个逻辑结构,本质上...原创 2020-03-04 15:47:52 · 3586 阅读 · 5 评论 -
图文并茂!一文教你掌握十大排序算法之快速排序
目录1. 快速排序原理介绍2. 快速排序算法步骤3. 代码实现1. 快速排序原理介绍快速排序是一种不稳定的排序算法,它的时间复杂度是O(N*logN),快速排序的基本思想是:每次从待排序的序列中选出一个基准数/枢轴(英文称为pivot),然后比它小的数都放到它的左边,比它大的数都放到它的右边,然后再对pivot的左边和右边两个序列进行快速排序,当排序的序列中只有一个数时不需要进...原创 2020-03-02 19:57:01 · 748 阅读 · 6 评论 -
图文并茂!一文教你掌握十大排序算法之归并排序
1. 归并排序原理介绍归并排序是建立在归并操作上的一种排序算法,它是一种稳定排序算法,它的时间复杂度是O(nlogn)。归并排序算法的核心在于分治(divide-and-conquer),分治法的思想:“分”是将一个问题分解成很多不同的小问题进行递归求解,“治”是将各个小问题的解重新凑合在一起组成最终的答案。对序列[3, 5, 2, 1, 4, 6, 8, 7]进行归并排序,首先是“分...原创 2020-03-01 23:36:13 · 379 阅读 · 5 评论 -
图文并茂!一文教你掌握十大排序算法之希尔排序(增量排序)
1. 希尔排序原理介绍原创 2020-03-01 10:32:30 · 1652 阅读 · 9 评论 -
图文并茂!一文教你掌握十大排序算法之直接插入排序算法
1. 直接插入排序算法介绍直接插入排序是一种非常好理解的排序算法,它的原理是将数组分为两个部分,一部分是已排序的,另外一部分是未排序的,每次排序都会从未排序的那一部分取出一个数,从有序序列的最后一个元素开始往前扫描,直至找到插入的位置。以升序为例,目前有一个数组:[3, 2, 1, 5, 4, 6]进行直接插入排序,第一个元素无需与其它元素比较,是有序序列的第一个元素所以我们从第一个元...原创 2020-02-29 20:49:51 · 430 阅读 · 0 评论 -
图文并茂!一文教你掌握十大排序算法之直接选择排序
目录1. 选择排序原理介绍2. 流程图2. 代码实现(Java)1. 选择排序原理介绍以升序为例,选择排序每一轮都会从未排序的数组元素中选出一个最小值放到已排序数组的末尾处,直到整个数组有序,选择排序是一种非常简单明了的排序算法,无论在任何情况下其时间复杂度都为O(n^2),所以用到这个排序算法时,数据规模应尽量小。2. 流程图2. 代码实现(Java)/**...原创 2020-02-29 09:02:28 · 1243 阅读 · 0 评论 -
图文并茂!一文教你掌握十大排序算法之冒泡排序及其优化思路
目录1.冒泡排序介绍2. O(n^2)的实现方法3. 优化思路1:提前到达有序4. 优化思路2:获取交换的最后一个元素下标5. 总结1.冒泡排序介绍冒泡排序是一种比较简单的排序方法,以数组升序的情况为例,它的原理是从第一个元素开始,每个元素都与其相邻的元素做比较,如果前一个元素比后一个元素大,则交换两个元素的位置,每一轮排序都确定一个最大值。它是一种稳定的排序方法,因为...原创 2020-02-28 21:56:45 · 489 阅读 · 0 评论 -
小白学习动态规划:完全背包(经典例题)
小白学习动态规划:完全背包参考博客:https://blog.csdn.net/qq_38984851/article/details/81133840https://blog.csdn.net/na_beginning/article/details/62884939完全背包与零一背包类似,不同的是每种物品有无限件,意味着选完一件物品放进背包后,有可能会继续选择同一件物品放入背包。...原创 2020-02-13 13:01:08 · 632 阅读 · 0 评论 -
小白学习动态规划:0-1背包(经典例题)
前言背包问题只是动态规划问题下的一个分类,求解0-1背包问题的思路本质上与求解动态规划的一般思路是一致的,我们经常遇到新的题目做不出来,并不是因为没有掌握动态规划的思想,而有可能是因为没有遇到这类具有显著特征的题目,无法将一般动态规划的解题思路应用在实战中。动态规划的原理:① 最优子结构性质:问题的最优解可以转化为求子问题的最优解,也就是说问题的最优解可以从子问题的最优解中得出。② 子问题...原创 2020-02-10 22:37:36 · 4373 阅读 · 0 评论 -
小白学习动态规划:优化篇
目录优化类型一:一维降变量优化类型二:二维降一维总结上一篇讲述了动态规划入门级题目,代码都是没有优化的,如果没有看过的读者也没关系,在下面会贴出这两道题目的所有代码,包括没有优化的和优化之后的。感兴趣的读者可以先去看一下上一篇的题目,都是EASY级别的题目。 小白学习动态规划:入门篇今天主要是对上一篇博客的两道题目进行优化,对于绝大多数利用动态规划的算法题作优化时,个人认为最重要的优化方法就...原创 2020-02-06 09:54:33 · 344 阅读 · 0 评论 -
小白学习动态规划:入门篇
入门动态规划个人总结一、动态规划概念1. 什么是动态规划 动态规划应用于拥有以下特点的问题:一般需要使用动态规划时,该问题的解可以由更小的解得出,例如:当求单位为n的最优解时,可以转换为求第n-1个单位的最优解······也就是说问题的解可以根据子问题的解求出。2. 动态规划问题的特点① 问题具有最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,那么该问题具有最优子结...原创 2020-02-02 22:25:24 · 552 阅读 · 0 评论