排序-北京师范大学.PPT

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排序-北京师范大学

导航图(3) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 导航图(4) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 导航图(5) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 导航图(6) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 导航图(7) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 导航图(8) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 导航图(9) 排序 基本概念 内排序 外排序 插入排序 交换排序 选择排序 索引排序 计数排序 归并排序 基数排序 二、内排序——交换排序(4) /*开始自右向左起泡*/ high=t;/*设定起泡区间的新终点*/ i=high; t=0; while(ilow) { if(r[i]r[i-1]) /*发现逆序,执行传送操作*/ { tmp=r[i]; while(ilowtmpr[i-1]) { r[i]=r[i-1]; i--; } r[i]=tmp; t=i+1; /*如果这是最后一次传送,那么t就是新起泡区间的起点*/ } i--; } if(t==0)break;/*未发生交换操作,r已经有序,跳出*/ } } 二、内排序——交换排序(5) ⑶快速排序 【基本思想】以某个数据元素PK(通常是r[0])为分界,将序列划分为两个子序列,左边的子序列的数据元素都不大于PK,右边的子序列的数据元素都不小于PK。然后对左右子序列进行同样的分割操作,直到子序列长度是1为止。 二、内排序——交换排序(6) void Part(elemtype r[ ],int l,int h,int *pivotloc) {/*将序列r的区间r[l..h]分割成两个子序列,最终的分界点由pivotloc返回*/ int low,high; elemtype pivotkey;/*PK值*/ low=l;high=h;/*初始化high,low*/ pivotkey=r[low];/*保存PK值,PK的初始位置是low*/ while(high!=low) /*未分割完,继续分割循环*/ { while(lowhighr[high]=pivotkey) high--;/*high的下行*/ if(lowhigh) { r[low]=r[high]; /*将r[high]放到PK的左边,PK的位置变为high*/ low++;/*准备low上行*/ } while(lowhighr[low]=pivotkey) low++;/*low上行*/ if(lowhigh) { r[high]=r[low]; /*将r[low]放到PK的右边,PK的位置变为low*/ high--;/*准备high上行*/ } } r[high]=pivotkey;/*high是PK的位置,将PK复制到r[high]*/ *pivotloc=high;/*表明分界点的位置*/ } 二、内排序——交换排序(7) void QuickSort(elemtype r[ ],int l,int h) { /*对序列区间r[l..h]进行快速排序。要调用QuickSort对一个表长是n的序列进行排序,可以这样调用:QuickSort(r,0,n-1);*/ int i; if(hl) {/*如果序列长度大于1*/ Part(r,l,h,i);/*分割序列,分界点是i*/ /*递归调用快速排序算法,对两个子序列分别进行快速排序*/ QuickSort(r,l,i-1); QuickSort(r,i+1,h); } } 最好时间复杂度: 最坏时间复杂度: 二、内排序——选择排序(1) ⑴简单选择排序 void SelectSort(elemtype r[ ],int n) {/*对表长是n的序列r进行直接选择排序*/ int i,j,k; elemtype tmp; for(i=1;in;i++) { /*进行n-1次选择*/ k=0; /*先假定最大值是r[

文档评论(0)

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

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

1亿VIP精品文档

相关文档