第十章排序(3)选择排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十章内部排序

选择排序

主讲:刘春

学习目标

①排序的概念及种类

②插入法排序的各种具体实现方法及算法分析

③选择法排序的各种具体方法的实现及时间性

能分析

④交换法排序的具体实现及性能分析

⑤归并排序和基数排序的各自实现算法

10.3 选择排序

103选择排序

选择排序的基本思想是不断从待选择排序(Selection Sort)的基本思想是:不断从待排记录序列中选出关键字最小的记录插入已排序记录序列的后面,直到n个记录全部插入已排序记录序列序列的后面直到

中。

选择排序主要的实现算法:

简单选择排序

树形选择排序

堆排序

简单选择排序(Simple Selection Sort)简单选择排序

(Simple Selection Sort)也称直接选择排序,是选择排序中最简单直观的一种方法。其基本操作思想:

①每次从待排记录序列中选出关键字最小的记录;②将它与待排记录序列第一位置的记录交换后,再将其“插入”已排序记录序列(初始为空);

不断重复过程(1)和(2),直到待排记录序列为空为止

void SelectSort(SqList &L)简单选择排序

(q )

{ //简单选择排序,算法10.9

for (i=1; i

{ //在L.r[i..L.length] 中选择key 最小的记录

k=i;

for( j=i+1;j<=L.length ; j++)

if ( L.r[j].key

if(k!=i)

{ KeyType temp=L.r[i]; L.r[i]=L.r[k]; L.r[k]=temp; } }

} //SelectSort

简单选择排序

算法分析

1.简单选择排序算法关键字比较次数与记录的初始排列无

n-1关。假定整个序列表有n个记录,总共需要n1趟的选择;

第i趟选择具有最小关键字记录所需要的比较次数是n-i-1

)()()次,总的关键字比较次数为:n-1)+(n-2)+…+1=n(n-1)/2

而记录的移动次数与其初始排列有关。当这组记录的初始状态是按关键字从小到大有序时,每趟选择后都不需要态是按关键字从小到大有序时,每一趟选择后都不需要进行交换,记录的总移动次数为0,这是最好的情况;而最坏的情况是每一趟选择后都要进行交换,一趟交换需要移动记录3次。总的记录移动次数为3(n-1)。

2

所以,简单选择排序的时间复杂度为O(n)。

算法分析

简单选择排序

2.简单选择排序算法只需要一个临时单元用作交换,因此

空间复杂度为O(1)。

3.由于在直接选择排序过程中存在不相邻记录之间的互换,

可能会改变具有相同关键字记录的相对位置,所以该算法是不稳定排序。

树形选择排序(Tree Selection Sort )又称锦标赛排序(Tour 树形排序

nament Sort ),是一种按照锦标赛的思想进行选择排序的方法。

主要思想:首先对n 个记录的关键进行两两比较,然后在其中的n/2个较小者之间再进行两两比较,如此重复,直至选出最小关键字的记录为止。

49 38 65 97 76 13 27 49

树形排序

13

38 3865

13 1327

4938659776132749

27

3827

38657627 4938659776*2749

堆排序方法是由J. Williams 和Floyd 提出的一种对直接堆排序

排序的改进方法,它在选择当前最小关键字记录的同时,还保存了本次排序过程所产生的比较信息。

堆排序(Heap Sort)借助于完全二叉树结构进行的排序,是一种树型选择排序。

其特点是:在排序过程中,将R[1..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树双亲结点和孩子树顺序存储结构利完树亲结点孩子结点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。

堆的定义

堆排序

n 个元素序列{k1,k2,…,kn },当且仅当满足如下性质称为堆。

(1)这些元素是一棵完全二叉树中的结点,且对于i=1,2,…, n

,ki 是该完全二叉树中编号为i 的结点;,(2) ki ≤k2i (或ki ≥k2i )

(1 ≤ i ≤ ⎣n /2⎦)

(3)ki k2i+l )(1i n /2(3) ki ≤k2i+1(或ki ≥k2i+l ) (1 ≤ i ≤ ⎣n /2⎦)

堆排序

Eg10-8图(a)和图(b)为堆的两个示例,所对应的元素序列分别为{92,84,25,36,14,07}和{15,39,23,87,44,31,52,90}。

15

92

3923 8425

87443152 361407

90

(a)堆顶元素值最大(b)堆顶元素值最小

根据堆的定义,可以推出堆的两个性质:

堆排序

①堆的根结点是堆中元素值最小(或最大)的结点,

称为堆顶元素。②从根结点到每个叶结点的路径上,元素的排序序列

都是递减(或递增)有序的。

堆排序的基本思想是:对一组待排序记录,首先把它们堆排序

堆排序的基本思是对待排序录首先把们的关键字按堆定义排列成一个序列(称为初始建堆),堆顶元素为最小(或大)关键字的记录,将堆顶元素输出;然后对剩余的记录再建堆,得到次最小(或大)关键字记录;如此反复进行直到全部记录有序为止这个过程称为堆排序反复进行,直到全部记录有序为止,这个过程称为堆排序。

相关文档
最新文档