分类 : 124个相关结果 732次浏览

数据结构与算法十:排序优化

如何选择合适的排序算法? 如果要实现一个通用的、高效率的排序函数,应该选择哪种排序算法? 前面讲过,线性排序算法的时间复杂度比较低,适用场景比较特殊。所以如果要写一个通用的排序函数,不能选择线性排序算法。 如果对小规模数据进行排序,可以选择 …

数据结构与算法九:线性排序

这一节讲述三种时间复杂度是O(n)的排序算法:桶排序、技术排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以又叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉 …

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

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

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

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

数据结构与算法七:递归

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

数据结构与算法六:队列

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

数据结构与算法五:栈

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

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

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

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

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

数据结构与算法三:数组

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