分类 : 70个相关结果 1000次浏览

数据结构与算法八:排序(下)

上一节讲述了冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是O(n²),比较高,适合小规模数据的排序。这一节讲两种时间复杂度为O(nlogn)的排序算法,归并排序和**快速排序***。 归并排序原理 归并排序的核心思想很简单 …

数据结构与算法八:排序(上)

如何分析一个“排序算法” 学习排序算法,我们除了学习它的算法原理、代码实现之外,更重要的是要学会如何评价、分析一个排序算法。那分析一个排序算法,要从哪几个方面入手呢? ==排序算法的执行效率== 对于排序算法执行效率的分析,我们一般会从这几 …

数据结构与算法七:递归

理解“递归” 递归是一种应用非常广泛的算法(或者编程技巧)。之后我们要讲的很多数据结构和算法的编码实现都要用到递归,比如DFS深度优先搜索、前中后序二叉树遍历等等。 不过,别看说了这么多,递归本身可是一点儿都不“高冷”,咱们生活中就有很多用 …

数据结构与算法六:队列

理解“队列” 队列这个概念非常好理解。你可以把它想象成排队买票,先来的先买,后来的只能站末尾。先进者先出,这就是典型的“队列”。 我们知道,栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本 …

数据结构与算法五:栈

理解“栈” 关于“栈”,有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个的放;取的时候,我们也是从上往下一个一个的依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操 …

数据结构与算法四:链表(下)

想写好链表并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等,写的时候非常容易出错。如果能熟练掌握这几个技巧,加上主动和坚持,轻松拿下链表代码完全没有问题。 一:理解指针或引用的含义 事实上,看懂链表的结构并不困难,但 …

数据结构与算法四:链表(上)

链表结构 相比数组,链表是一种稍微复杂一点的数据结构。数组和链表这两个非常基础、非常常用的数据结构,我们常常会放到一块儿来比较。 从底层的存储结构来看。下图中,数组需要一块连续的内存空间来存储,对内存的要求较高。如果我们申请一个 100MB …

数据结构与算法三:数组

在大部分编程语言中,数组都是从0开始编号的,那么为什么数组要从0开始而不是1呢?带着这个问题我们来看下面的内容。 如何实现随机访问? 数组(Array)是一种线性表数据结构。它是用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表, …

数据结构与算法二:复杂度分析(下)

上一节中我们掌握了一些常见的复杂度,如O(1)、O(logn)、O(n)、O(nlogn)。下面我们继续四个复杂度分析方面的知识点:最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst c …

数据结构与算法二:复杂度分析(上)

复杂度分析的必要性 通过跑代码得到算法执行的时间和占用空间局限性非常大,其测试结果非常依赖测试环境,测试结果也受数据规模的影响很大,所以我们需要一个不用具体的测试数据来测试,就可以粗略的估计算法的执行效率的方法。 大O复杂度表示法(时间复杂 …