我们考虑到用户体验,以及版权问题。用户对于计算机拥有进一步探索诉求的,我们推荐京东的购买渠道,点击
文轩书店 王道考研复习指导 。
Pre Talk
Again,您自己都无法增长,就别提“帮助别人”,第一要义。
关于商业业态,什么样的业务合适用资本刺激?CEO 具体做点啥?收乐财算是自媒体吗?Jingyi 怎么定
位这家公司?且听我们娓娓道来。
BTW,我很神经地将这篇演讲练习,加入了《
自我训斥集锦》。
01 查找分类
7.1
第一节,主要知识点直接插入排序、折半插入排、希尔排序。
直接插入排序,Jingyi 会给它一个名词“整理手牌”。按顺序取数据,排序着插入。
折半插入排序,两端设置 low, high, mid = (high+low)/2,中间指针的元素值 > 高指针(high)的元
素值,则 high = mid - 1;然后,中间指针的元素值 <= 低指针的元素值, low = mid + 1。
希尔排序,基本思想是,不断抽取子列排序再放入。
习题笔记
1.直接插入排序,比较次数 n(n-1)/2。验证方式,即元素个数为 1,元素个数为 2,元素个数为 3,代
入验证。一定要学会交叉验证。
2.冒泡排序扫面一行,一定会有两个元素位置归其位,且一定是大元素在右边,小元素在左边。直接插
入排序,会出现小元素对在右边。
3.插入排序,可能存在一种情况,即最后一次排序之前,所有元素都不在其位置。例如,612345。
4.希尔排序考察增量 ,主要考察哪些元素变换位置了,梳理共同点。
5.折半插入,时间复杂度 O(n2),这里是依据物理存储结构的。
6.希尔排序没有“归位”功能,即排序之后,没有元素归到其位置。
7.2
讲课
1.插入排序比较次数 = n(n-1)/2
2.希尔排序是插入排序的一个子集。
综合-1:关键词序列{4,5,1,2,6,3},写出直接插入排序。
第一轮:4 | 51263
第二轮:45 | 1263
第三轮:145 | 263
第四轮:1245 | 63
第五轮:12345 | 6
第六轮:123456
注意,顺序取一个元素,排序。每个元素O(n),共 n 个元素,时间复杂度 O(n2)。
综合-II:给出关键字序列{50,26,38,80,70,90,8,30,40,20},增量分别为 5,3,1的时候,
排序结果。
解答:
原始序列 50,26,38,80,70,90,8,30,40,20
(1)增量为 5。50,8*,30*,40*,20*,90,26*,38*,80*,70*
(2)增量为 3。26*,8,30,40*,20,80,50*,38,90,70
(3)增量为 1。8,20,26,30,38,40,50,70,80,90

7.2 讲课 Ending
7.3
本节主要聚焦于“冒泡排序”和“快速排序”。
1.算法介绍
冒泡排序,每一行两个相邻元素相互位置互换。
快速排序,高低指针,和中间指针,如果高指针数值小于中间指针数值,则与低指针互换。
两个算法时间复杂度都是 O(n2)。
快排,一定有一个元素“归位”。
关注两种说法,移动元素次数,比较趟数,概念不一样。移动元素次数,即排序过程中,移动元素的次
数。而比较趟数,为了排序,对比多少次。
2.练习知识点
- 快速排序 + 顺序列表(数组)。据说最佳组合。
- 快速排序,针对的序列最好随机性较高,如果序列已经基本有序,快排性能未必那么突显。
- 排序全过程在内存的,称为“内部排序”。内部排序算法,平均性能最好的,快速排序。
- 排序有部分要存到外存,称为“外部排序”。
- 对于快速排序而言,如果进行了 2 次以上。序列是两边有序。
- 快速排序,中间值(pivot) matters a lot. 如果 pivot 接近数列中间的元素值,则速度快;如
果 pivot 接近数列的最大、最小值,则排序速度慢。
- 快排扫一次一定会有个元素归位,如果 2 个元素归位,则扫了两次。
- 快排的递归次数,与每次划分之后,分区处理顺序无关
知识点及练习
7.4
本节是“简单选择排序”,“堆排序”。
选择排序,选 + 排。选的时候,选出最小或者最大的,排就是直接放在某个元素之后。
堆排序,通常都是自下而上进行交换。
本小节的习题,有很多涉及,已知一个序列,是否能判断是不是完全二叉堆,Complete Binary Heap。
怎么判断呢?遵从以下原则:
第一,必须是完全二叉树 CBT;
第二,每个子树必须满足完全二叉堆。例如,小根堆要保证左右孩子必须大于父母节点;与此同时,大
根堆要保证左右孩子必须小于父母节点;
案例-1:序列 {19,34,26,97,56,75}
按照层次遍历:

案例-2:序列 {15,9,7,8,20,-1,7,4} 建立小根堆。
这里要注意,二叉堆建立起来之后,一律用层次遍历顺序表示。

案例-3:关键码序列{23,17,72,60,25,8,68,71,52},两次排序之后,余下的序列
{ 23,25,68,52,60,72,71 }
注意
小根堆、大根堆,整个顺序可以不一致,但是子树(3个节点)内部,一定满足小根堆、大根堆的定义。
【2009】关键字序列 {5,8,12,19,28,20,15,22}小根堆,插入关键字 3 ,调整之后的小根堆是
()
插入新的关键字 {3} 之后,得到:
3,5,12,8,28,20,15,22,19
解析:
关键字插入是在叶子层面,从最底下的子树开始按照小根堆的定义,将两个节点的值互换。

【2011】已知序列 {25,13,10,12,9} 是大根堆,在序列尾部插入新元素 18 ,将其再调整为大根堆
,调整过程中元素之间进行比较次数 ()
解析:
进行比较 2 次,分别是原序列中的元素值 10 节点,和原序列中的元素值 25 节点。

【2015】已知小根堆 8,15,10,21,34,16,12 ,删除关键字 8 之后,重新建堆,关键字的比较次
数()
解析:比较 3 次,分别是 10,15,16,只有对比 10 节点的时候,是换的。

【2018】将数据序列 {6,1,5,9,8,4,7} 建成大根堆,正确序列的变化过程。
答案:
6,1,7,9,8,4,5 ->
6,9,7,1,8,4,5 ->
9,6,7,1,8,4,5 ->
9,8,7,1,8,4,5
练习

平时的订正
7.5
这部分工作我在自己居住的地方完成的,由于上次室友投诉我外放新闻的问题,加上闹钟问题,永远都
是所到之处,和伙伴们的主要冲突。
其中,有些冲突我会处理,有些不会。总而言之,非常感谢冲突,这些事件,相较于某些高防御、低输
出的工作环境,真的是显得真实许多了。
然而,我并不鼓吹沟通的时候,完全“简单粗暴”。我倒是追随学习得到的课好几年,以前不明白的事
,你听课,反复听,骨灰级听,也能听懂。那就是,大多数情况,是油光水滑效率高些,虽然油光水滑
有其副作用,但是大多数时候,相互之间能够理解对方部门一些,稍微动点小脑筋,把各部门说服的方
式,比较效率。
什么时候不管用?
大概当你感谢冲突的时候,可能得自己自发主动地思考,是不是应该调整一下组织内部的情况。当然,
这些略显纸上谈兵了,具体还是要实践。
知识点
- 10TB文件,进行排序(或者存储,有时候排序自动进行的),选用【归并排序】
- 外部排序中,最常用的是【归并排序】
- 生日,例如 18801010 这类都是基数排序,按 digit 排序
7.6
每刷一行,一定能归位一个元素的是:
选择排序、堆排序、快速排序
7.7

最后一题的答案,参照哈夫曼树的模式。
