列举一些算法的基本概念:

链表:链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便, 就是访问比较耗费时间。

数组:数组也是数据呈线性排列的一种数据结构。与前一节中的链表不同,在数组中,访问数据十分简单,而添加和删除数据比较耗工夫。这和姓名按拼音顺序排列的电话簿类似。

栈:栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新 书开始取。 LIFO后进先出结构

队列:与前面提到的数据结构相同,队列中的数据也呈线性排列。虽然与栈有些相似,但队列中添加和删除数据的操作分别是在两端进行的。 FIFO先进先出结构

哈希表:在哈希表这种数据结构中,使用将在 5-3 节讲解的“哈希函数”,可以使数据的查询效率得到显著提升。

堆:堆是一种图的树形结构,被用于实现“优先队列”(priority queues)(树形结构的详细讲解在 4-2 节)。优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺 序取出。

二叉查找树:二叉查找树(又叫作二叉搜索树或二叉排序树)是一种数据结构,采用了图的树形结构 (关于树形结构的详细说明请参考 4-2 节)。数据存储于二叉查找树的各个结点中。

排序:

冒泡排序:冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的 顶端,所以这个算法才被称为“冒泡排序”。

选择排序:选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换” 这一操作的算法。在序列中寻找最小值时使用的是线性查找。

插入排序:插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内 取出一个数据,然后将它插入到已排序区域内合适的位置上。

堆排序:堆排序的特点是利用了数据结构中的堆。

归并排序:归并排序算法会把序列分成长度相同的两个子序列,当无法继续往下分时(也就是每个子 序列中只有一个数据时),就对子序列进行归并。归并指的是把两个排好序的子序列合并成一个 有序序列。该操作会一直重复执行,直到所有子序列都归并为一个整体为止。

快速排序:快速排序算法首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分 为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。