南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第九章 排序

第九章排序 .概述 插入排序 快速排序 交换排序(起泡排序) 。 选择排序 。归进排序
第九章 排序 • 概述 • 插入排序 • 快速排序 • 交换排序(起泡排序) • 选择排序 • 归并排序 1

概述 .排序:将一组杂乱无章的数据按一定的规律顺次 排列起来。 数据表(datalist:它是待排序数据元素的有限集合。 排序码k小:通常数据元素有多个属性域,即多个 数据成员组成,其中有一个属性域可用来区分元素, 作为排序依据。该域即为排序码。每个数据表用 哪个属性域作为排序码,要视具体的应用需要而 定。 2
概述 • 排序:将一组杂乱无章的数据按一定的规律顺次 排列起来。 • 数据表(datalist): 它是待排序数据元素的有限集合。 • 排序码(key): 通常数据元素有多个属性域, 即多个 数据成员组成, 其中有一个属性域可用来区分元素, 作为排序依据。该域即为排序码。每个数据表用 哪个属性域作为排序码,要视具体的应用需要而 定。 2

.排序算法的稳定性:如果在元素序列中有两个元 素r[和[,它们的排序码心=k,且在排序之 前,元素排在1前面。如果在排序之后,元素 仍在元素的前面,则称这个排序方法是稳定 的,否则称这个排序方法是不稳定的。 内排序与外排序:内排序是指在排序期间数据元 素全部存放在内存的排序;外排序是指在排序期 间全部元素个数太多,不能同时存放在内存,必 须根据排序过程的要求,不断在内、外存之间移 动的排序。 3
• 排序算法的稳定性: 如果在元素序列中有两 个元 素r[i]和r[j], 它们的排序码 k[i] == k[j] , 且在排序之 前, 元素r[i]排在r[j]前面。如果在排序之后, 元素 r[i]仍在元素r[j]的前面, 则称这个排序方法是稳定 的, 否则称这个排序方法是不稳定的。 • 内排序与外排序: 内排序是指在排序期间数据元 素全部存放在内存的排序;外排序是指在排序期 间全部元素个数太多,不能同时存放在内存,必 须根据排序过程的要求,不断在内、外存之间移 动的排序。 3

排序的时间开销:排序的时间开销是衡量算法好 坏的最重要的标志。排序的时间开销可用算法执 行中的数据比较次数与数据移动次数来衡量。 算法运行时间代价的大略估算一般都按平均情况 进行估算。对于那些受元素排序码序列初始排列 及元素个数影响较大的算法,需要按最好情况和 最坏情况进行估算。 算法执行时所需的附加存储: 评价算法好坏的另 一标准。 4
• 排序的时间开销: 排序的时间开销是衡量算法好 坏的最重要的标志。排序的时间开销可用算法执 行中的数据比较次数与数据移动次数来衡量。 • 算法运行时间代价的大略估算一般都按平均情况 进行估算。对于那些受元素排序码序列初始排列 及元素个数影响较大的算法,需要按最好情况和 最坏情况进行估算。 • 算法执行时所需的附加存储: 评价算法好坏的另 一标准。 4

待排序数据表的类定义 #include const int DefaultSize =100; template class Element 川数据表元素定义 public: T key; /排序码 field otherdata; /川其他数据成员 Element&operator=(Element&x){ key =x.key;otherdata=x.otherdata; return this; 5
待排序数据表的类定义 #include const int DefaultSize = 100; template class Element { //数据表元素定义 public: T key; //排序码 field otherdata; //其他数据成员 Element& operator = (Element& x) { key = x.key; otherdata = x.otherdata; return this; } 5

bool operator==(Element&x) return key ==x.key; /判*this与x相等 bool operator&x) return key =(Element&x) return key >=x.key;} /判*this大于或等于x bool operator>(Element&x) return key x.key; /判*this大于x bool operator&x) return key x.key; /判*this小于x }; 6
bool operator == (Element& x) { return key == x.key; } //判*this与x相等 bool operator & x) { return key = (Element& x) { return key >= x.key; } //判*this大于或等于x bool operator > (Element& x) { return key > x.key; } //判*this大于x bool operator & x) { return key < x.key; } //判*this小于x }; 6

template class dataList{ /川数据表类定义 private: Element *Vector; /存储排序元素的向量 int maxSize; 川向量中最大元素个数 int currentSize; /川当前元素个数 public: datalist(int maxSz=DefaultSize):/构造函数 maxSize(maxSz),currentSize(0) Vector new Element[maxSize];} int Length(return currentSize; 川取表长度 7
template class dataList{ //数据表类定义 private: Element * Vector; //存储排序元素的向量 int maxSize; //向量中最大元素个数 int currentSize; //当前元素个数 public: datalist (int maxSz = DefaultSize) : //构造函数 maxSize(maxSz), currentSize(0) { Vector = new Element[maxSize]; } int Length() { return currentSize; } //取表长度 7

void Swap (Element&x,Element&y) Elementtemp =x;x=y;y =temp;} Element&operator (int i) /川取第i个元素 return Vector[i];} int Partition(const int low,const int high); 川快速排序划分 };
void Swap (Element& x, Element& y) { Element temp = x; x = y; y = temp; } Element& operator [](int i) //取第i个元素 { return Vector[i]; } int Partition (const int low, const int high); //快速排序划分 }; 8

插入排序(Insert Sorting) ·基本方法是:每步将一个待排序的元素,按其排序 码大小,插入到前面已经排好序的一组元素的适当 位置上,直到元素全部插入为止。 -直接插入排序 -折半插入排序 希尔排序 9
插入排序 (Insert Sorting) • 基本方法是:每步将一个待排序的元素,按其排序 码大小,插入到前面已经排好序的一组元素的适当 位置上, 直到元素全部插入为止。 – 直接插入排序 – 折半插入排序 – 希尔排序 9

直接插入排序(Insert Sort) 基本思想是: 当插入第i(21)个元素时,前面的V0,V[1小,, V[i-1已经排好序。这时,用V[的排序码与V[i- 1,V[i-2,.…的排序码顺序进行比较,找到插入位 置即将V[插入,原来位置上的元素向后顺移。 10
• 基本思想是 : 当插入第i (i≥1) 个元素时,前面的V[0], V[1], …, V[i-1]已经排好序。这时,用V[i]的排序码与V[i- 1], V[i-2], …的排序码顺序进行比较,找到插入位 置即将V[i]插入,原来位置上的元素向后顺移。 10 直接插入排序 (Insert Sort)
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第八章 图.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第七章 搜索结构.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第六章 集合与字典.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第五章 树.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第四章 数组、串与广义表.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第三章 栈和队列.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第二章 线性表.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第十章 文件、外部排序与外部搜索.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第一章 绪论.ppt
- 计算机系统结构课程教材:计算机科学丛书《深入理解计算机系统》【兰德尔E.布莱恩特、大卫R.奥哈拉伦】原书第三版(中文版)PDF电子书(共十二章)Computer Systems A Programmer's Perspective.pdf
- 上海交通大学:《高级计算机系统结构》课程教学资源(讲稿).pdf
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第09章 新型计算机病毒.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第08章 移动智能终端恶意代码.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第07章 Linux病毒技术.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第06章 宏病毒.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第05章 特洛伊木马(Trojan horse).ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第04章 传统计算机病毒.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第03章 计算机病毒结构及技术分析.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第02章 计算机病毒理论模型.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第01章 计算机病毒概述(刘功申).ppt
- 中国科学院高能所计算中心:高能物理数据的存储和管理(汪璐).pptx
- 中国科学院高能所计算中心:数据技术课程 CSC 2018 Data Technologies Exercises(CSC DT 2018 Introduction).pdf
- 中国科学院高能所计算中心:数据技术上机 Data Technologies – CERN School of Computing 2019.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Writing Parallel software(pres).pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Writing Parallel software(booklet).pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Practical vectorization-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Practical vectorization-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Modern programming languages for HEP-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Modern programming languages for HEP-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Structuring data for efficient I/O-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Structuring data for efficient I/O-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Many ways to store data-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Many ways to store data-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Preserving data-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Preserving data-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Key ingredients to achieve effective I/O-pres.pdf