当前课程知识点:数据结构 >  第9章 内部排序 >  9.4 选择排序 >  9.4 选择排序

返回《数据结构》慕课在线视频课程列表

9.4 选择排序在线视频

下一节:9.5 堆排序

返回《数据结构》慕课在线视频列表

9.4 选择排序课程教案、知识点、字幕

同学们,大家好

我是云南大学信息学院教师孔兵

这节课我们介绍选择排序

先介绍简单选择排序

简单选择排序的的思路是

通过n-i次关键字间的比较

从n-i+1个记录中选出关键字最小的记录

并和第i(1<=i<=n)个记录交换之

选择排序的方法就是为一个位置

找到排好序后应该存储在这个位置当中的记录

从i=1开始,为1号单元找记录

如果是自小到大排序

1号单元中应该是最小关键字的记录

通过n-1次比较

可以从n个记录中找到关键字最小的记录

设是j号单元的记录,如果j不等于1

记录j和记录1交换,交换后

关键字最小的记录已经在它的最终位置1号单元中

此后,循环i++等于2,为第2个位置找记录

在序列的2到n这段,通过n-2次比较

可以找到次小的一个

和2号单元的记录交换

循环直到i=n-1为止

为n-1个位置找到记录,完成排序

图1所示的序列当中有8个记录

第1趟排序,首先为第1个位置找记录

最小一个是6号单元的关键字13,把13和49交换

这样最小13号记录就已经在它的最终位置1号单元中

如图2所示,随后在2到8之间

通过比较为2号单元找记录

依次类推,后续过程就不说明了

看一下简单选择排序的实现

函数比较简单,for循环从1到n-1

为每个位置找记录

循环中用函数selectminkey在序列的i到n之间

找关键字最小的记录

并把记录的位置返回赋值给j,i不等于j时交换两个记录

看一下简单选择排序的时间效率

最好情况,如果初始序列有序,移动次数是0

最坏情况是每趟选择排序都要交换,需要移动3(n-1)次

不管初始序列如何

简单选择排序的比较次数都是n(n-1)/2

时间复杂度是O(n2)

简单选择排序移动次数较少,比较次数比较多

如何减少比较次数呢?

比较关系具有传递性,如a大于b,b大于c

已经蕴含了a大于c,不需要进行a和c的比较

通过利用比较的传递性

可以有效减少排序中比较的次数

树形选择排序就是基于这样的考虑设计的

树形选择排序,又称为锦标排序

这种方法利用比较的传递性

过程类似于体育比赛中淘汰赛的进行方式

排序思路是,首先对n个记录的关键字进行两两比较

然后在其中n/2(向上取整)个较小者之间再进行两两比较

直到选出最小关键字的记录为止

这样一个比较过程可以用一颗二叉树来描述

所以称为树形选择排序

看一个示例,有8个关键字

关键字类型为字符串,依据字典序进行比较

8个关键字构成二叉树的8个叶子

可以理解为体育比赛中的8强,随后两两比较

胜者进入双亲结点,算是4强

继续两两比较,BAO和DIAO进入决赛

BAO胜出,BAO是最终序列中的第1记录

下面要找出次小关键字,和体育比赛不同

次小关键字不一定是亚军关键字

次小关键字应该在输给冠军的关键字中确定

怎么确定呢?

寻找次小关键字的方法是

把关键字类型的最大值赋值给存有冠军的叶结点

图中用*号表示

把这个最大关键字和它兄弟结点的关键字LIU进行比较

兄弟结点是第一个输给冠军的结点

LIU胜出,进入双亲结点

LIU继续和CHEN比较

CHEN是第二个输给冠军的结点

CHEN胜出,进入双亲结点

最后CHEN和 DIAO比较

CHEN胜出,CHEN是序列中的次小关键字

下一次同样把最大值赋值给存CHEN的叶结点

进入双亲结点,最后CHEN和DIAO比较

CHEN胜出,CHEN是序列中的次小关键字

下一次同样把最大值赋值给给存CHEN的叶节点

通过这样自下而上的比较过程得到下一记录

直到所有记录8个记录都输出,完成排序

树形选择排序利用比较关系的传递性

减少了排序过程的比较次数

带来的问题是:辅助存储空间较多

n个记录需要额外n-1个空间存储分支结点

另外,每次选择都要和最大值进行一次多余的比较

下一节我们介绍树形选择排序的改进---堆排序

好同学们,今天的课就到这儿

下次课再见

数据结构课程列表:

前言

-1.算法概念导入

--1.1 算法概念导入

-2.数据结构课程介绍

--2.数据结构课程介绍

-数据结构前言PPT

第0章 预备知识

-0.1变量、类型和表达式

--0.1变量、类型和表达式

-0.2 函数

--0.2 函数

-0.3 指针和单链表

--0.3 指针和单链表

-0.4 数组、指向函数的指针

--0.4 数组、指向函数的指针

-第0章 预备知识讨论题

-数据结构第0章预备知识PPT

第1章 绪论

-1.1什么是数据结构

--1.1什么是数据结构

--测试题

-1.2基本概念和术语

--1.2基本概念和术语

--测试题

-1.3数据结构的描述

--1.3数据结构的描述

--测试题

-1.4抽象数据类型的定义和实现

--1.4抽象数据类型的定义和实现

--测试题

-1.5算法和算法分析概念

--1.5算法和算法分析概念

--测试题

-1.6算法分析示例

--1.6算法分析示例

--测试题

-第1章 绪论讨论题

-数据结构第1章 绪论PPT

第2章 线性表

-2.1 线性表的类型定义

--2.1线性表的类型定义

--测试题

-2.2线性表的顺序表示和实现

--2.2 线性表的顺序表示和实现

--测试题

-2.3 线性链表

--2.3 线性链表

--测试题

-2.4 静态链表

--2.4 静态链表

--测试题

-2.5 循环链表和双向链表

--2.5 循环链表和双向链表

--测试题

-第2章 线性表讨论题

-数据结构第2章线性表PPT

第3章 栈和队列

-3.1 栈

--3.1栈

--测试题

-3.2 栈的实现

--3.2 栈的实现

--测试题

-3.3 栈的应用

--3.3 栈的应用

-3.4 栈与递归的实现

--3.4栈与递归的实现

--测试题

-3.5 队列和链队列

--3.5 队列和链队列

--测试题

-3.6 循环队列

--3.6 循环队列

--测试题

-第3章 栈和队列讨论题

-数据结构第3章栈和队列PPT

第4章 串

-4.1 串

--4.1 串

--测试题

-数据结构第4章 串PPT

第5章 数组

-5.1 数组定义和表示

--5.1 数组定义和表示

--测试题

-5.2矩阵的压缩存储

--5.2 矩阵的压缩存储

--测试题

-第5章 数组讨论题

-数据结构第5章数组PPT

第6章 树和二叉树

-6.1 树的定义和基本术语

--6.1 树的定义和基本术语

-6.2 二叉树和二叉树的性质

--6.2 二叉树和二叉树的性质

--测试题

-6.3 二叉树的存储结构

--6.3二叉树的存储结构

--测试题

-6.4 遍历二叉树

--6.4 遍历二叉树(1)

--6.4 遍历二叉树(2)

--测试题

-6.5 线索二叉树

--6.5 线索二叉树

--测试题

-6.6 树的存储

--6.6树的存储

-6.7 树的转换和遍历

--6.7 树的转换和遍历

--测试题

-6.8 赫夫曼树

--6.8 赫夫曼树

-6.9 赫夫曼编码

--6.9 赫夫曼编码

--测试题

-第6章 树和二叉树讨论题

-数据结构第6章树和二叉树PPT

第7章 图

-7.1 图的定义和术语

--7.1.1图的定义和术语(1)

--7.1.2图的定义和术语(2)

--测试题

-7.2 图的存储结构

--7.2.1 数组表示法(1)

--7.2.2 数组表示法(2)

--7.2.3 邻接表

--测试题

-7.3 图的遍历

--7.3.1 深度优先搜索

--7.3.2 广度优先搜索

--测试题

-7.4 最小生成树

--7.4.1 普里姆算法

--7.4.2 克鲁斯卡尔算法

--测试题

-7.5 有向无环图

--7.5.1 拓扑排序

--7.5.2 关键路径

--测试题

-7.6 最短路径

--7.6.1 单源最短路径-迪杰斯特拉算法

--7.6.2 每一对顶点之间的最短路径-弗洛伊德算法

--测试题

-第7章 图讨论题

-数据结构第7章图PPT

第8章 查找

-8.1 查找基本概念和顺序查找

--8.1 查找基本概念及顺序查找

--测试题

-8.2 有序表的查找

--8.2 有序表的查找

--测试题

-8.3 二叉排序树

--8.3.1 二叉排序树(1)

--8.3.2 二叉排序树(2)

--测试题

-8.4 平衡二叉树

--8.4 平衡二叉树

--测试题

-8.5 哈希表

--8.5.1 哈希表及哈希函数的构造

--8.5.2 解决冲突的方法

--8.5.3 哈希表的查找和性能分析

--测试题

-第8章 查找讨论题

-数据结构第8章查找PPT

第9章 内部排序

-9.1插入排序

--9.1.1 插入排序(1)

--9.1.2 插入排序(2)

--测试题

-9.2 希尔排序

--9.2 希尔排序

--测试题

-9.3 快速排序

--9.3 快速排序

--测试题

-9.4 选择排序

--9.4 选择排序

--测试题

-9.5 堆排序

--9.5 堆排序

--测试题

-9.6 归并排序

--9.6 归并排序

--测试题

-9.7 基数排序

--9.7 基数排序

--测试题

-9.8 排序方法总结

--9.8 排序方法总结

-第9章 内部排序讨论题

-数据结构第9章内部排序PPT

9.4 选择排序笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。