【数据结构】排序排序的基本概念.docx

上传人:b****9 文档编号:5554443 上传时间:2022-12-25 格式:DOCX 页数:4 大小:18.70KB
下载 相关 举报
【数据结构】排序排序的基本概念.docx_第1页
第1页 / 共4页
【数据结构】排序排序的基本概念.docx_第2页
第2页 / 共4页
【数据结构】排序排序的基本概念.docx_第3页
第3页 / 共4页
【数据结构】排序排序的基本概念.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

【数据结构】排序排序的基本概念.docx

《【数据结构】排序排序的基本概念.docx》由会员分享,可在线阅读,更多相关《【数据结构】排序排序的基本概念.docx(4页珍藏版)》请在冰豆网上搜索。

【数据结构】排序排序的基本概念.docx

【数据结构】排序排序的基本概念

排序(sort)或分类

所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。

其确切定义如下:

输入:

n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。

输出:

Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。

(或Ki1≥Ki2≥…

≥Kin)。

1.被排序对象--文件

被排序的对象--文件由一组记录组成。

记录则由若干个数据项(或域)组成。

其中有一项可用来标识一个记录,称为关键字项。

该数据项的值称为关键字(Key)。

注意:

在不易产生混淆时,将关键字项简称为关键字。

2.排序运算的依据--关键字

用来作排序运算依据的关键字,可以是数字类型,也可以是字符类型。

关键字的选取应根据问题的要求而定。

【例】在高考成绩统计中将每个考生作为一个记录。

每条记录包含准考证号、姓名、各科的分数和总分数等项内容。

若要惟一地标识一个考生的记录,则必须用"准考证号"作为关键字。

若要按照考生的总分数排名次,则需用"总分数"作为关键字。

排序的稳定性

当待排序记录的关键字均不相同时,排序结果是惟一的,否则排序结果不唯一。

在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是不稳定的。

注意:

排序算法的稳定性是针对所有输入实例而言的。

即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,则该排序算法就是不稳定的。

排序方法的分类

1.按是否涉及数据的内、外存交换分

在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内部排序(简称内排序);反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。

注意:

①内排序适用于记录个数不很多的小文件

②外排序则适用于记录个数太多,不能一次将其全部记录放人内存的大文件。

2.按策略划分内部排序方法

可以分为五类:

插入排序、选择排序、交换排序、归并排序和分配排序。

排序算法分析

1.排序算法的基本操作

大多数排序算法都有两个基本的操作:

(1)比较两个关键字的大小;

(2)改变指向记录的指针或移动记录本身。

注意:

(2)种基本操作的实现依赖于待排序记录的存储方式。

2.待排文件的常用存储方式

(1)以顺序表(或直接用向量)作为存储结构

排序过程:

对记录本身进行物理重排(即通过关键字之间的比较判定,将记录移到合适的位置)

(2)以链表作为存储结构

排序过程:

无须移动记录,仅需修改指针。

通常将这类排序称为链表(或链式)排序;

(3)用顺序的方式存储待排序的记录,但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)

排序过程:

只需对辅助表的表目进行物理重排(即只移动辅助表的表目,而不移动记录本身)。

适用于难于在链表上实现,仍需避免排序过程中移动记录的排序方法。

3.排序算法性能评价

(1)评价排序算法好坏的标准

评价排序算法好坏的标准主要有两条:

①执行时间和所需的辅助空间

②算法本身的复杂程度

(2)排序算法的空间复杂度

若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间是O

(1),则称之为就地排序(In-PlaceSou)。

非就地排序一般要求的辅助空间为O(n)。

(3)排序算法的时间开销

大多数排序算法的时间开销主要是关键字之间的比较和记录的移动。

有的排序算法其执行时间不仅依赖于问题的规模,还取决于输入实例中数据的状态。

文件的顺序存储结构表示

#definenl00//假设的文件长度,即待排序的记录数目typedefintKeyType;//假设的关键字类型

typedefstruct{//记录类型KeyTypekey;//关键字项

InfoTypeotherinfo;//其它数据项,类型InfoType依赖于具体应用而定

}RecType;

typedefRecTypeSeqList[n+1];//SeqList为顺序表类型,表中第0个单元一般用作哨兵

注意:

若关键字类型没有比较算符,则可事先定义宏或函数来表示比较运算。

【例】关键字为字符串时,可定义宏"#defineLT(a,b)(Stromp((a),(b))0)"。

那么算法中"ab"可用"LT(a,b)"取代。

若使用C++,则定义重载的算符""更为方便。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1