- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 安徽机电职业技术学院 信息工程系 王飞 hefei0421@126.com 2009年1月 第9课 排序 排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一组数据元素(或记录)从任意序列成一个按关键字有序的序列。本课主要学习: 了解有关排序的基本概念和术语 掌握三种简单的排序方法:简单选择排序、冒泡排序、直接插入排序 了解快速排序的算法思想及实现 了解有关堆排序、归并排序与基数排序的基本思想 9.1 排序的基本概念 首先对排序下一个确切的定义:假设含有n个记录的序列{R1, R2, …, Rn},其相应的关键字序列为{K1, K2, …, Kn}。将这些记录重新排序为{Ri1, Ri2, …, Rin},使得相应的关键字值满足条件Ki1≤Ki2≤…≤Kin,这样的一种操作称为排序。 一种排序方法,若排序前后具有相同关键字的记录仍保持原来的相对次序,则称之为稳定的,否则称之为不稳定的。对稳定的排序方法,任举多少组排序实例都应得到稳定的结果;对不稳定的排序方法,只要举出一种关键字的实例说明它的不稳定性即可断定。 内部排序与外部排序 内部排序是指待排序的记录者存放在计算机内存中的排序过程。 外部排序是指因记录数量很大,以至于内存不能容纳全部记录,在排序过程中需对外存进行访问的排序过程。 本课主要讨论内部排序算法。 内部排序的方法很多,每种方法都有各自的优缺点,适合于不同的环境,如记录的初始状态,记录数量的多少等。但就全面性而言,很难指明哪种排序方法是最好的方法。在学习各种排序方法时,除了掌握算法的实现过程以外,更重要的是了解它们的设计思想和算法的时间分析。 排序记录数据类型说明 待排序的记录可以是顺序存储结构,也可以是链式存储结构。本课讨论中若无特殊说明,都假定待排序记录均以顺序存储结构存放,且为了讨论方便,设记录的关键字均为整数,待排序记录的数据类型说明如下: #define MAXITEM 100 #define KeyType int struct rec { KeyType key; /* 关键字 */ ElemType data; /* 记录的其余数据部分,下面 的讨论中忽略 */ }; struct rec sqlist[MAXITEM]; 9.2 三种简单的排序方法 简单选择排序 选择排序的基本思想是:第i趟排序时,在n-i+1个记录中选择关键字值最小的记录作为有序序列的第i个记录。(i=1,2,…,n-1) 简单选择排序的作法是:第1趟扫描所有数据,选择其中最小的一个与第一个数据互换;第2趟从第2个数据开始向后扫描,选择最小者与第二个数据互换;依次进行下去,进行n-1趟扫描后即完成排序过程。 简单选择排序比较独特的作法是它很少交换数据,只有用一个整型变量记住第i趟扫描过程的最小数的位置,在该趟扫描结束后将该位置的数与第i个数交互位置。 简单选择排序过程举例 简单选择排序算法 void SelectSort(sqlist r, int n) { int i, j, min; struct rec temp; for (i=1;i=n-1;i++) /*n个数据,进行n-1趟排序 */ { min=i; /*min指示最小数位置 */ for (j=i+1; j=n; j++) { if (r[j].keyr[min].key) min=j; } if (min!=i) { temp=r[i]; r[i]=r[min]; r[min]=temp; } } } 简单选择排序算法时间复杂度分析 选择排序的基本运算为比较运算。 选择排序总共要进行n-1趟排序。 每趟排序需要进行比较的次数分别为n-1, n-2, …, 2, 1。 所以总的比较次数为: 简单选择排序的算法时间复杂度为O(n2)。 简单选择排序是不稳定的排序方法 如果是以下的一组待排序的序列: 使用简单选择排序方法进行排序后,结果为: 可以看到,排序后,原来6和6的顺序变成了6和6 ,所以它是不稳定的排序方法。 简单选择排序算法简单易懂,容易实现,但不适宜n较大的情况。 调试选择排序算法 先构造几个辅助函数: input函数,用于输入一组待排序序列,代码如下: void input(sqlist r, int n) { int i; printf(\nEnter %d keys:,n); for (i=1;i=n;i++) { scanf(%d,r[i].key); } } 调试选择排序算
您可能关注的文档
- 2012年西华大学专升本《计算机综合》考试大纲---西华大学综合类考试大纲---计算机综合.doc
- 200901Java自考题(参考答案).doc
- Abbdcca医学图像处理技术.doc
- Abguxy医学图像处理技术.doc
- AgccakJava课程设计报告.doc
- AlcgthyJava课程设计报告.doc
- c 完整教程.doc
- C++、JAVA集中上机报告模板.doc
- C++常用英语单词.doc
- cadp2的全部配图中文教程!3.doc
- 浙江衢州市卫生健康委员会衢州市直公立医院高层次紧缺人才招聘11人笔试模拟试题参考答案详解.docx
- 浙江温州泰顺县退役军人事务局招聘编外工作人员笔试备考题库及参考答案详解一套.docx
- 江苏靖江市数据局公开招聘编外工作人员笔试模拟试题及参考答案详解.docx
- 广东茂名市公安局电白分局招聘警务辅助人员40人笔试模拟试题带答案详解.docx
- 江苏盐城市大丰区住房和城乡建设局招聘劳务派遣工作人员4人笔试模拟试题带答案详解.docx
- 浙江舟山岱山县东沙镇人民政府招聘笔试模拟试题及参考答案详解1套.docx
- 最高人民检察院直属事业单位2025年度公开招聘工作人员笔试模拟试题含答案详解.docx
- 浙江金华市委宣传部、中共金华市委网信办所属事业单位选调工作人员笔试备考题库及答案详解1套.docx
- 广东深圳市党建组织员招聘40人笔试模拟试题及答案详解1套.docx
- 江苏南京水利科学研究院招聘非在编工作人员4人笔试模拟试题及参考答案详解.docx
文档评论(0)