随笔分类 -  我的第一本算法书

文章来自:我的第一本算法书
排序--桶排序
摘要:桶排序的介绍 ​ 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。但桶排序并不是 比较排序,他不受到 O(n log n) 下 阅读全文

posted @ 2022-01-11 22:30 胡子就不刮 阅读(34) 评论(0) 推荐(0) 编辑

排序--计数排序
摘要:计数排序的介绍 ​ 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数 计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素 阅读全文

posted @ 2022-01-11 22:28 胡子就不刮 阅读(67) 评论(0) 推荐(0) 编辑

排序--基数排序
摘要:基数排序的介绍 基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数; ​ 基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序 阅读全文

posted @ 2022-01-11 22:25 胡子就不刮 阅读(66) 评论(0) 推荐(0) 编辑

排序--希尔排序
摘要:希尔排序的介绍 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名 ​ 希尔排序是把记录按下标的一定增量 阅读全文

posted @ 2022-01-11 22:21 胡子就不刮 阅读(49) 评论(0) 推荐(0) 编辑

数组的查找--二分查找
摘要:二分查找也是一种在数组中查找数据的算法。和线性查找不同,它只能查找已经排好序的数据。二分查找通过比较数组中间的数据与目标数据的大小,可以得知目标数据是在数组的左边还是右边。因此,比较一次就可以把查找范围缩小一半。重复执行该操作就可以找到目标数据,或得出目标数据不存在的结论。 解说 二分查找利用已排好 阅读全文

posted @ 2021-06-17 20:28 胡子就不刮 阅读(308) 评论(0) 推荐(0) 编辑

数组的查找--线性查找
摘要:线性查找是一种在数组中查找数据的算法。与二分查找不同,即便数据没有按顺序存储,也可以应用线性查找。线性查找的操作很简单,只要在数组中从头开始依次往下查找即可。虽然存储的数据类型没有限制,但为了便于理解,这里我们假设存储的是整数。 解说 线性查找需要从头开始不断地按顺序检查数据,因此在数据量大且目标数 阅读全文

posted @ 2021-06-17 20:24 胡子就不刮 阅读(133) 评论(0) 推荐(0) 编辑

排序--快速排序
摘要:快速排序算法首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。 [ 比基准值小的数 ] 基准值 [ 比基准值大的数 ] 接着,对两个“[ ]”中的数据进行排序之后,整体的排序便完成了。对“[ ]”里面的 阅读全文

posted @ 2021-06-17 20:19 胡子就不刮 阅读(125) 评论(0) 推荐(0) 编辑

排序--归并排序
摘要:归并排序算法会把序列分成长度相同的两个子序列,当无法继续往下分时(也就是每个子序列中只有一个数据时),就对子序列进行归并。归并指的是把两个排好序的子序列合并成一个有序序列。该操作会一直重复执行,直到所有子序列都归并为一个整体为止。 解说 归并排序中,分割序列所花费的时间不算在运行时间内(可以当作序列 阅读全文

posted @ 2021-06-17 20:13 胡子就不刮 阅读(47) 评论(0) 推荐(0) 编辑

排序--堆排序
摘要:堆排序的特点是利用了数据结构中的堆。 从降序排列的堆中取出数据时会从最大的数据开始取,所以将取出的数据反序输出,排序就完成了。 解说 堆排序一开始需要将 n 个数据存进堆里,所需时间为 O(nlogn)。排序过程中,堆从空堆的状态开始,逐渐被数据填满。由于堆的高度小于 log2n,所以插入 1 个数 阅读全文

posted @ 2021-06-17 20:10 胡子就不刮 阅读(198) 评论(0) 推荐(0) 编辑

排序--插入排序
摘要:插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上 解说 在插入排序中,需要将取出的数据与其左边的数字进行比较。就跟前面讲的步骤一样,如果 阅读全文

posted @ 2021-06-17 20:05 胡子就不刮 阅读(53) 评论(0) 推荐(0) 编辑

排序--选择排序
摘要:选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”这一操作的算法。在序列中寻找最小值时使用的是线性查找。 解说 选择排序使用了线性查找来寻找最小值,因此在第 1 轮中需要比较 n -1 个数字,第2 轮需要比较 n -2 个数字……到第 n -1 轮的时候就只需比较 1 阅读全文

posted @ 2021-06-17 19:48 胡子就不刮 阅读(45) 评论(0) 推荐(0) 编辑

排序--冒泡排序
摘要:冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”。 解说 在冒泡排序中,第 1 轮需要比较 n -1 次,第 2 轮需要比较 n -2 次……第 n 阅读全文

posted @ 2021-06-17 19:46 胡子就不刮 阅读(132) 评论(0) 推荐(0) 编辑

排序
摘要:排序就是将输入的数字按照从小到大的顺序进行排列。这里我们用柱形来表示数字,数字越大,柱形就越高 假设现在有如上图所示的输入数据,那么我们的目标就是将它们像下图一样,按从小到大的顺序从左边开始依次排列。 如果只有 10 个数字,手动排序也能轻松完成,但如果有 10 000 个数据,排序就不那么容易了。 阅读全文

posted @ 2021-06-16 22:28 胡子就不刮 阅读(97) 评论(0) 推荐(0) 编辑

数据结构--二叉查找树
摘要:二叉查找树(又叫作二叉搜索树或二叉排序树)是一种数据结构,采用了图的树形结构。数据存储于二叉查找树的各个结点中。 最后将最大结点移到被删除结点的位置上。这样一来,就能在满足二叉查找树性质的前提下删除结点了。如果需要移动的结点(此处为4)还有子结点,就递归执行前面的操作 解说 我们可以把二叉查找树当作 阅读全文

posted @ 2021-06-16 21:24 胡子就不刮 阅读(93) 评论(0) 推荐(0) 编辑

数据结构--堆
摘要:堆是一种图的树形结构,被用于实现“优先队列”(priority queues) 优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺序取出。在堆的树形结构中,各个顶点被称为“结点”(node),数据就存储在这些结点中。 这就是堆的示例。结点内的数字就是存储的数据。堆中的每个结点最 阅读全文

posted @ 2021-06-16 21:19 胡子就不刮 阅读(123) 评论(0) 推荐(0) 编辑

数据结构--哈希表
摘要:在哈希表这种数据结构中,使用将在 5-3 节讲解的“哈希函数”,可以使数据的查询效率得到显著提升。 哈希表存储的是由键(key)和值(value)组成的数据。例如,我们将每个人的性别作为数据进行存储,键为人名,值为对应的性别。 为了和哈希表进行对比,我们先将这些数据存储在数组中 此处准备了 6 个箱 阅读全文

posted @ 2021-06-16 21:16 胡子就不刮 阅读(192) 评论(0) 推荐(0) 编辑

数据结构--队列
摘要:与前面提到的数据结构相同,队列中的数据也呈线性排列。虽然与栈有些相似,但队列中添加和删除数据的操作分别是在两端进行的。就和“队列”这个名字一样,把它想象成排成一队的人更容易理解。在队列中,处理总是从第一名开始往后进行,而新来的人只能排在队尾。 从队列中取出(删除)数据时,是从最下面,也就是最早入队的 阅读全文

posted @ 2021-06-16 21:13 胡子就不刮 阅读(58) 评论(0) 推荐(0) 编辑

数据结构--栈
摘要:栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取。 从栈中取出数据时,是从最上面,也就是最新的数据开始取出的。这里取出的是Red。 如果再进行一次出栈操作,取出的就是Green了。 阅读全文

posted @ 2021-06-16 21:12 胡子就不刮 阅读(68) 评论(0) 推荐(0) 编辑

数据结构--数组
摘要:数组也是数据呈线性排列的一种数据结构。与前一节中的链表不同,在数组中,访问数据十分简单,而添加和删除数据比较耗工夫。这和 1-1 节中讲到的姓名按拼音顺序排列的电话簿类似。 这就是数组的概念图。Blue、Yellow、Red作为数据存储在数组中。 数据按顺序存储在内存的连续空间内。 由于数据是存储在 阅读全文

posted @ 2021-06-16 21:10 胡子就不刮 阅读(77) 评论(0) 推荐(0) 编辑

数据结构--链表
摘要:决定了数据的顺序和位置关系 数据存储于计算机的内存中。内存如右图所示,形似排成 1 列的箱子,1 个箱子里存储 1 个数据。数据存储于内存时,决定了数据顺序和位置关系的便是“数据结构”。 链表 链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便,就是访问比较耗费时间。 这 阅读全文

posted @ 2021-06-11 17:23 胡子就不刮 阅读(230) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示