选择类排序法(树形选择排序,堆排序)

基本思想:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行n-1趟比较,直到所有记录排序完成为止。

空间效率:O(1)——1个附加单元。

算法的稳定性:不稳定

基本思想:先把待排序的n个记录的关键字两两进行比较,取出较小者。然后再在n/2 个较小者中,采用同样的方法进行比较选出每两个中的较小者,如此反复,直至选出最小关键字记录为止。

算法分析:

被选中的关键字都是走了一条由叶子结点到根结点的比较的过程,由于含有n个叶子节点的完全二叉数的深度为log2n +1,则在树型选择排序中,每选择一个小关键字需要进行log2n次比较,因此其时间复杂度为O(nlog2n)。移动记录次数不超过比较次数,故总的算法时间复杂度为O(nlog2n)。

堆排序是对树型选择排序的进一步改进。采用堆排序时,只需要一个记录大小的辅助空间。堆排序是在排序过程中,将向量中存储的数据看成一棵完全二叉树,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择关键字最小的记录,即待排序记录仍采用向量数组方式存储,并非采用树的存储结构,而仅仅是采用完全二叉树的顺序结构的特征进行分析而已。

堆的含义:完全二叉树的所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。若系列是堆,则堆顶元素必定为序列中n个元素的最小值(或最大值)。

具体做法:

把待排序的记录的关键字存放在数组r[1..n]之中,将r看成是一棵完全二叉树的顺序表示,每个结点表示一个记录,第一个记录r[1]作为二叉树的根,以下各记录r[2...n]依次逐层从左到右顺序排列,任意结点r[i]的左孩子是r[2i],右孩子是r[2i+1],双亲是r[i/2]。对这棵完全二叉树进行调整,使各结点的关键字值满足下列条件:

r[i].key≥r[2i].key并且r[i].key≥r[2i+1].key(i=1,2, ...n/2 ),

满足这个条件的完全二叉树为堆。

堆排序二叉树图

堆排序方块图

堆排序的过程主要需要解决两个问题:

(1) 按堆定义建初堆

一个任意序列看成是对应的完全二叉树,由于叶结点可以视为单元素的堆,因而可以反复利用“筛选”法,自底向上逐层把所有子树调整为堆,直到将整个完全二叉树调整为堆。

(2)去掉最大元之后重建堆,得到次大元。

堆排序是一种不稳定的排序方法,

它不适用于待排序记录个数n较少的情况,但对于n较大的文件还是很有效的。

THE END
0.NOI大纲文字收藏版3. 排序算法 ·【5】归并排序 ·【5】快速排序 ·【6】堆排序 ·【6】树形选择排序(锦标赛排序) ·【5】桶排序 ·【6】基数排序 4. 字符串相关算法 ·【5】字符串匹配算法——KMP 5. 搜索算法 ·【6】搜索的剪枝优化 ·【6】记忆化搜索 ·【7】启发式搜索 ·【7】双向宽度优先搜索 ·【7】迭代jvzq<84yyy4489iqe0ipo8hqpvkov87312?1385217927h>;57=549:0ujznn
1.数据结构之树形选择排序(锦标赛排序)锦标赛排序也叫树形选择排序,是一种按照锦标赛的思想进行选择的排序方法,该方法是在简单选择排序方法上的改进。简单选择排序,花费的时间大部分都浪费在值的比较上面,而锦标赛排序刚好用树保存了前面比较的结果,下一次比较时直接利用前面比较的结果,这样就大大减少比较的时间,从而降低了时间复杂度,由O(n^2)降到O(jvzquC41dnuh0lxfp0tfv8qkjcu28::525:11jwvkerf1mjvckrt1@=;5::15
2.漫画:什么是“锦标赛排序”?漫画:什么是 “锦标赛排序” ? [导读]你了解选择排序吗? ——— 第二天 ——— ——— 如图中所示,我们把原本的冠军选手5排除掉,在四分之一决赛和他同一组的选手6就自然获得了直接晋级。 接下来的半决赛,选手7打败选手6晋级;在总决赛,选手7打败选手3晋级,成为了新的冠军。 因此我们可以判断出,选手7是总jvzquC41yy}/4:ne0eun1jwvkerf1A=:93?/j}rn
3.漫画:什么是“锦标赛排序”?接下来的半决赛,选手7打败选手6晋级;在总决赛,选手7打败选手3晋级,成为了新的冠军。 因此我们可以判断出,选手7是总体上的亚军。 假如给定如下数组,要求从小到大进行升序排列: 第一步,我们根据数组建立一颗满二叉树,用于进行“锦标赛式”的多层次比较。数组元素位于二叉树的叶子结点,元素数量不足时,用空结点补齐。jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1B5655:
4.快速排序本页面将简要介绍快速排序。定义 快速排序(英语:Quicksort),又称分区交换排序(英语:partition-exchange sort),简称「快排」,是一种被广泛运用的排序算法。基本原理与实现 过程 快速排序的工作原理是通过 分治 的方式来将一个数组排序。快速排序分为三个过程:将jvzq<84qk/}jmr3eqo5cc|ne1s{jet2uqtz0
5.14.8树形选择排序·LeetCode算法练习个人总结(Java)·看云14.8 树形选择排序(堆排序前身) 基本概念: 树形选择排序(Tree Selection Sort),又称锦标赛排序(Tournament Sort),也可以算得上堆排序的前身,是一种按照锦标赛思想进行选择排序的方法。它是根据节点的大小, 建立树, 输出树的根节点, 并把此重置为最大值, 再重构树,因为树中保留了一些比较的逻辑, 所以减少了jvzquC41yy}/mjsenq{e0ls1ocrjorsi1nkfvltfg1=54B:3
6.希尔排序,⌊log2⁡n⌋}(从大到小),则希尔排序算法的时间复杂度为 𝑂(𝑛3/2)O(n3/2)。 命题2 若间距序列为 𝐻 ={𝑘 =2𝑝 ⋅3𝑞 ∣𝑝,𝑞 ∈ℕ,𝑘 ≤𝑛}H={k=2p⋅3q∣p,q∈N,k≤n}(从大到小),则希尔排序算法的时间复杂度为 𝑂(𝑛log2⁡𝑛)O(nlog2⁡n)。jvzquC41qk3xktn0qtm0djxke1yiguq/uqxu1
7.数据结构求答案单选题第1题(2)分排序趟数与序列的原始状态有时间复杂性为O(nlog2n)且空间复杂性为O(1)的排序方法是( )。 A、归并排序 B、堆排序 C、快速排序 D、锦标赛排序 第15题 (2) 分 要将现实生活中的数据转化为计算机所能表示的形式,其转化过程依次为( )。 A、逻辑结构、存储结构、机外表示 B、存储结构、逻辑结构、机外表示 C、机外表示、逻辑结构、存储结构 DjvzquC41yy}/|‚gcpi4dqv4swgyukxs1::9fhj89d3jg9kf:3d:9h=fhc5?9d;=f0jznn
8.中国石油大学数据结构试题及答案C 锦标赛排序 D 快速排序 6、设有两个串t和p,求p在t中首次出现的位置的运算叫做()。 A 求子串 B 模式匹配 C 串替换D 串连接 7、在数组A中,每一个数组元素A[i][j]占用3个存储字,行下标i从1到8,列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放该数组至少需要的存储字数是()jvzquC41o0972mteu0tfv8iqe1>43<>7;7<70qyon
9.经典排序算法详解对象的移动次数不超过关键码的比较次数,所以锦标赛排序总的时间复杂度为O(nlog2n)。 多了附加存储。如果有 n 个对象,必须使用至少 2n-1 个结点来存放胜者树。 稳定 6、堆排 堆排序分为两个步骤:第一步,根据初始输入数据,利用堆的调整算法 FilterDown( ) 形成初始堆,第二步,通过一系列的对象交换和重新调jvzquC41dnuh0lxfp0tfv8~wejkoiuncpanbry~1ctzjeuj1fgzbkux174945@=9
10.Python选择排序中的树形选择排序python选择排序里面主要讲了三个排序,分别是简单选择排序、树形选择排序、堆排序。今天这篇文章主要讲树形选择排序,树形选择排序也被称为锦标赛排序,树形选择排序运用了锦标赛的思想进行排序,树形选择排序是指首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进行两两比较,如此重复,直至选出最小的记录为止。jvzquC41yy}/lk:30pku1jwvkerf1;7;72?/j}r