选择排序的多种实现.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
选择排序的多种实现

实验6 选择排序的多种实现 回顾:数组 数组是同种类型的有限个元素组成的有序的集合,其特点是:有限,同类,有序 我们可以通过数组的下标来直接访问数组中的任一元素。数组元素与数据类型是数组基类型的普通变量一样,既可以作为左值,又可以作为右值 一维数组是只需一个下标即可确定一个数组元素的数组 在C++中,一维数组的存储形式是顺序连续存储 回顾:结构 结构用于将不同数据类型的元素(数据项)聚合为一个整体。每个数据项称为该结构的一个成员。结构成员与相应数据类型的普通变量一样,既可以作为左值,又可以作为右值 用户可以利用已定义的数据类型的数据项和系统规定的规则定义出自己所需的数据类型 回顾:结构 结构定义示例: struct RECORD{ int orderID; char companyName[100]; char city[50]; char country[50]; char productName[100]; double unitPrice; int quantity; double discount; char shippedDate[11]; }; 回顾:结构 结构可作为一个整体进行赋值、取地址、sizeof等操作,或作为函数调用的实际参数、返回值 例如: RECORD f1(RECORD r); RECORD r1,r2, *p; ………… r1 = r2; r2 = f1(r1); 结构也可以通过对象成员访问运算符(.)或指针成员访问运算符(-)和成员名来访问某个成员 例如: cin r1. orderID; cin p-orderID; r1.quantity += 10; p-quantity += 10; 交换排序 排序:排序是把一个无序的数据元素序列整理成有规律的、按排序关键字递增(减)排列的有序序列的过程 关键字(Key):数据对象中作为排序依据的的数据项(成员) 正序与逆序:按关键字从小到大排列称为正序;按关键字从大到小排列称为逆序 交换排序 交换排序:是一类常用的排序算法,其基本思想是:两两比较待排序记录的关键字(即排序码),如果不合排序要求,则交换之,直到所有对象都排好为止 我们学习过的冒泡排序就是一种典型的交换排序 冒泡排序示例 交换排序 交换排序的基本操作 比较操作 交换操作 选择排序 选择排序(Selection Sort):也是一种交换排序 其基本思想为:每一趟从待排序的记录中选出关键字最小的记录,同待排序的第一个记录交换,直到全部记录排序完毕 选择排序示例 选择排序 vs. 冒泡排序 冒泡排序:不断比较并交换相邻记录,因此第i小的记录是一步步地越过前面比它大的那些记录,最后到达正确位置 选择排序:直接找出剩下的未排序记录中的最小记录,然后直接与数组中第i个记录交换,一步到位 选择排序过程最多需要n-1次交换,而冒泡排序平均交换次数为O(n×n),相比之下,选择排序的交换次数少多了 本次实验的要求 本次实验要求使用选择排序算法实现一个程序,将一组合同记录按不同的关键字进行排序,并尽量减少排序所需时间 如何减少排序所需时间? 交换排序中基本的操作是比较操作与交换操作。如果能减少比较操作/交换操作的执行次数,或减少每次比较操作/交换操作的执行时间,就可以提高排序程序的运行速度 如何减少排序所需时间? 三种方法: 改进算法,减少比较操作/交换操作的执行次数 改进代码,减少每次比较操作/交换操作的执行时间 改进数据结构,如将排序关键字的数据类型改为比较操作速度更快的类型 改进算法的例子 冒泡排序中的交换标志 冒泡排序-选择排序 改进代码的例子 由于结构对象的赋值和传值调用时需要对结构内部所有成员的值进行复制,需要较多的CPU运行时间,因此很多时候,我们可以通过对结构对象的引用/指针/数组下标进行操作等间接方式来代替直接对结构对象进行赋值和传值调用,以减少运行时间开销 例如, 对如下定义的函数: //RECORD为一个已经定义的结构类型 void fun(RECORD x); 进行调用时,编译程序会安排将实际参数的值复制到形式参数变量中,需要较多的运行时间。如果将其改变为如下形式: void fun(RECORD* px); 则只需要复制实际参数的值(一个指针,VC++6中一般为32位)到形式参数变量中,可节省一些运行时间开销 改进代码的例子 对于交换操作也可以进行类似的改进。此时我们一般不直接对记录数组进行排序,而是对一个与记录数组相对应的下标数组进行排序。排序完毕后要对记录数组进行顺序操作(如按排好的顺序输

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档