项目八 排序 《数据结构》教学课件.ppt

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

数据结构 项目八 排序 低位优先法(Least Significant Digit first,简称LSD):先按英语成绩的等级由高到低将学生记录分成A、B、C、D、E 5组,再将其按从左到右、从上到下的顺序排列,得到关键字序列,如左图所示;然后按数学成绩的等级由高到低重新分成A、B、C、D、E 5组,再将其按从左到右、从上到下的顺序排列,得到关键字序列,如右图所示; 对数据元素序列(35,66,2,15,6,81,6*,9)进行一趟快速排序的过程 : 2.算法实现 int Partition (SeqList *L, int low, int high) {//以第一个数据元素为基准进行一趟快排,返回排序后基准数据元素的位置 L - r[0] = L - r[low]; //以序列中第一个数据元素为基准 while (low high) //从序列两端交替向中间扫描 {while (low high L - r[high].key = L - r[0].key)//从后向前扫描 high --; //high指针前移 L - r[low] = L - r[high]; //将小于基准关键字的数据元素移到low所指位置 while (low high L - r[low].key = L - r[0].key)//从前向后扫描 low ++; //low指针后移 L - r[high] = L - r[low]; } //将大于基准关键字的数据元素移到high所指位置 L - r[low] = L - r[0]; //将基准数据元素移到low所指位置 return low; } //返回排序后基准数据元素的位置 void QuickSort(SeqList *L, int low, int high) {//对顺序表L作快速排序 int p; if(low high) //表长度大于1 {p = Partition (L, low, high); //对L进行一趟快速排序,返回基准数据元素的位置 QuickSort (L, low, p - 1); //对表的前半部分进行快速排序 QuickSort (L, p + 1, high); //对表的后半部分进行快速排序 } } 3.算法分析 (1)空间复杂度 (2)时间复杂度 (3)稳定性 快速排序是一种不稳定的排序算法。 最好情况下为O(log2n),最坏情况下为O(n)。 最好情况下为O(log2n),最坏情况下为O(n2),平均时间复杂度为O(nlog2n) 。 任务四 选择排序 一、直接选择排序 二、树形选择排序 三、堆排序 一、直接选择排序 1.基本思想 2.算法实现 3.算法分析 1.基本思想 通过关键字的比较,每次从待排序列中选出关键字最小的数据元素,将其与待排序列的第一个数据元素交换,直到全部数据元素都有序排列。 对于一个具有n个数据元素的序列,进行直接选择排序的具体过程是: ① 进行第一趟排序时,用r[1]与其余n-1个数据元素比较,选出关键字最小的数据元素与r[1]交换。 ② 进行第二趟排序时,用r[2]与其余n-2个数据元素比较,选出关键字最小的数据元素与r[2]交换。 ③ 依此类推,进行第i趟排序时,用r[i]与其余n-i个数据元素比较,选出关键字最小的数据元素与r[i]交换。共需进行i-1趟选择,直到所有数据元素有序排列为止。 对数据元素序列(35,66,2,15,6,81,6*,9)进行直接选择排序的过程 : 2.算法实现 void SelectSort (SeqList *L) //对顺序表L作直接选择排序 {int i, j, t; for (i = 1; i L - Length; i ++) {进行第i趟排序时,选出待排序列中关键字最小的数据元素与r[i]交换 t = i; //设置t的初值 for (j = i + 1; j = L - Length; j ++) if (L - r[j].key L - r[t].key)//找到待排序列中关键字最小的数据元素 t = j; //记录关键字最小的数据元素的下标 if (t != i) {//关键字最小的数据元素与第i个数据元素交换 L -.r[0] = L - r[t]; L - r[t] = L - r[i]; L -.r[i] = L - r[0]; } } } 3.算法分析 (1)空间复杂度 (2)时间复杂度 (3)稳定性 直接选择排序是一种不稳定的排序算法。 排序过程中仅使用了一个辅助单元,算法的空间复杂度为O(1)。 直接选择排序的平均时间复杂度为O

文档评论(0)

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

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

1亿VIP精品文档

相关文档