8-1-数据结构——从概念到C++实现(第3版)-王红梅-清华大学出版社

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

大 学

int length;
版 社
};
void MergeSort1(int first, int last);
void MergeSort2( );
void Print( );
排序类的定义
Sort :: Sort(int r[ ], int n)
void Sort :: Print( )
{
{
data = new int[n];
( 从 概 念

升序(非降序) 降序(非升序)
实 现

排序码:排序的依据, 简单起见,也称关键码。
不失一般性,做如下约定:
(1)进行升序排序
清 华 大 学 出 版 社
排序的数据模型是什么?
排序是对线性结构的一种操作
(2)记录只有排序码一个数据项 (3)采用顺序存储,且下标从 1 开始
正序、逆序
正序:待排序序列中的记录已按关键码排好序。
快速排序
堆排序
二路归并非递归算法
(2)不基于比较:根据待排序数据的特点所采取的其他方法
第八章 v 排序技术
8-1-2 排序算法的性能
排序算法的性能
如何衡量排序算法的性能呢?
(1)时间性能:排序算法在各种情况(最好、最坏、平均)下的时间复杂度。

例如,基于比较的内排序在排序过程中的基本操作:
据 结 构
( 从 概 念

升序(非降序) 降序(非升序)
实 现

排序码:排序的依据,
职工号
姓名
性别
年龄
工作时间
清 华

简单起见,也称关键码。 0001
0002
王刚 张亮

48

35

1990.4
出 版

2003.7
排序的数据模型是什么? 0003
0004
刘楠 齐梅

57

35
1979.9 2003.7
排序是对线性结构的一种操作 0005
for (int i = 0; i < length; i++)
数 据
for (int i = 0; i < n; i++)
{
结 构 (
data[i] = r[i];
cout << data[i] << "\t";
从 概 念
length = n;
}
到 实 现
}
cout << endl;
) 清
Sort :: ~Sort( )

① 比较:关键码之间的比较;
从 概

② 移动:记录从一个位置移动到另一个位置。
到 实 现


(2)空间性能:排序过程中占用的辅助存储空间。
华 大

辅助存储空间是除了存放待排序记录占用的存储空间之外,执行算法所
出 版 社
需要的其他存储空间。
排序类的定义
class Sort
class Sort
{
{
public:
同关键码的记录,若经过排序,这些记录的相对次序保持不变,
则称这种排序算法稳定,否则称为不稳定。
数 据



学号 姓名 高数 英语 语文
学号 姓名 高数 英语 语文
从 概


0001 王 军 85 68 88
0001 李 明 64 68 88
实 现

0002 李 明 64 72 92 0003 汤晓影 85 78 86
0002 王 军 85 72 92
清 华 大

0003 汤晓影 85 78 86
出 版 社
…… ………
…… ………
排序算法的稳定性只是算法的一种属性,且由具体算法决定
排序的分类
根据排序过程中所有记录是否全部放在内存中,排序方法分为:
(1)内排序:在排序的整个过程中,待排序的所有记录全部放在内存中
(2)外排序:待排序的记录个数较多,整个排序过程需要在内外存之间多次
数 据 结

交换数据才能得到排序的结果
( 从


根据排序方法是否建立在关键码比较的基础上,排序方法分为:
到 实


(1)基于比较:要通过关键码之间的比较和记录的移动实现
清 华


① 插入排序; ② 交换排序; ③ 选择排序; ④ 归并排序
出 版 社
直接插入排序
起泡排序
简单选择排序
二路归并递归算法
希尔排序
12 34 5
12 34 5





逆序(反序):待排序序列中记录的顺序与排好序的顺序相反。
从 概 念




54 32 1
12 34 5
清 华




趟:在排序过程中,将待排序的记录序列扫描一遍称为一趟。

深刻理解趟的含义能够更好地掌握排序方法的思想和过程
算法的稳定性
排序算法的稳定性:假定在待排序的记录序列中存在多个具有相
}
华 大 学
{
出 版 社
delete[ ] data;
}
李爽

56
1982.9
排序的定义
数据元素、结点、顶点
排序:给定一组记录的集合{r1, r2, …, rn},其相应的关键码分别 为{k1, k2, …, kn},将这些记录排列为{rs1, rs2, …, rsn}的序列,使得
数 据 结 构
相应的关键码满足ks1≤ks2≤…≤ksn(或ks1≥ks2≥…≥ksn)。
int Partition(int first, int last);
数 据

void Sift(int k, int last);
构 (

void Merge(int first1, int last1, int last2);
概 念

void MergePass(int h);
实 现



int *data;
第八章 v 排序技术
8-1-1 排序的基本概念
排序的定义
数据元素、结点、顶点
排序:给定一组记录的集合{r1, r2, …, rn},其相应的关键码分别 为{k1, k2, …, kn},将这些记录排列为{rs1, rs2, …, rsn}的序列,使得
数 据 结 构
相应的关键码满足ks1≤ks2≤…≤ksn(或ks1≥ks2≥…≥ksn)。
private:
Sort(int r[ ], int n); ~Sort( ); void InsertSort( ); void ShellSort( ); void BubbleSort( ); void QuickSort(int first, int last); void SelectSort( ); void HeapSort( );
相关文档
最新文档