c交换排序解说.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
交换排序 数据结构(第二十三讲) 知识回顾 插入排序的基本思想 希尔排序的基本思想 教学内容 交换排序介绍 起泡排序 快速排序 归并排序 基数排序 本讲重点、难点 重点 交换排序的基本思想 起泡排序算法 快速排序算法 掌握归并排序的基本思想 掌握基数排序的基本思想 难点 起泡排序算法 快速排序算法 交换排序 交换排序介绍 起泡排序 快速排序 归并排序 基数排序 交换排序 基本思想 两两比较待排序记录的关键码,如果发生逆序(即排列顺序与排序后的次序正好相反),则交换,直到所有记录都排好序为止。 主要分类 起泡排序 快速排序 起泡排序 交换排序介绍 起泡排序 快速排序 归并排序 基数排序 起泡排序 基本思想 每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。 优点及局限 优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。 前提:顺序存储结构 起泡排序 例 关键字序列 T=(21,25,49,25*,16,08),请写出冒泡排序的具体实现过程。 起泡排序 起泡排序算法分析 最好情况:初始排列已经有序,只执行一趟起泡,做 n-1 次关键码比较,不移动对象。 最坏情形:初始排列逆序,算法要执行n-1趟起泡,第i趟(1? i? n) 做了n- i 次关键码比较,执行了n-i 次对象交换。此时的比较总次数KCN和记录移动次数RMN为: 起泡排序 起泡算法实现 void Bubblesort(ElemType R[],int n) { int flag=1; //当flag为0则停止排序 for (int i=1; in; i++) { //i表示趟数,最多n-1趟 flag=0;//开始时元素未交换 for (int j=n-1; j=i; j--) if (R[j]R[j-1]){ //发生逆序 ElemType t=R[j]; R[j]=R[j-1]; R[j-1]=t;flag=1; } //交换,并标记发生了交换 if(flag==0)return; } } 快速排序 交换排序介绍 起泡排序 快速排序 归并排序 基数排序 快速排序 基本思想 从待排序列中任取一个元素 (例如取第一个) 作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表; 然后再对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。 优点及局限: 因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快! 前提:顺序存储结构 快速排序 例 关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。 例 关键字序列 T=(21,25,49,25*,16,08),计算机如何实现快速排序算法的某一趟过程? 快速排序 算法实现 每一趟子表的形成是采用从两头向中间交替式逼近法; int Partition(SqList L,int low,int high){ //一趟快速排序 //交换子表 r[low…high]的记录,使支点(枢轴)记录到位,并返回其位置。返回时,在支点之前的记录均不大于它,支点之后的记录均不小于它。 L.r[0]=L.r[low]; //以子表的首记录作为支点记录,放入r[0]单元 while(low high){ //从表的两端交替地向中间扫描 while(lowhigh L.r[high].key=pivotkey ) - -high; L.r[low]=L.r[high]; //比支点小的记录交换到低端; while(lowhigh L.r[low].key=pivotkey) + +low; L.r[high]=L.r[low]; //比支点大的记录交换到高端; } L.r[low]=L.r[0]; //支

文档评论(0)

a336661148 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档