网站大量收购独家精品文档,联系QQ:2885784924

《数据结构(C语言版)》 第10章_内排序.ppt

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

通过筛选算法,可以将一个任意的排序码序列建成一个堆,堆的第1个元素,即完全二叉树的根结点的值就是排序码中最小的。将选出的最小排序码从堆中删除,对剩余的部分重新建堆,可以继续选出其中的最小者,直到剩余1个元素排序即告结束。 /* 堆排序算法 */ void heapsort(table *tab) { int i; for(i=tab-length/2;i=1;i--) sift(tab,i,tab-length); /*对所有元素建堆*/ for(i=tab-length;i=2;i--) /* i表示当前堆的大小,即等待排序的元素的个数*/ { tab-r[0].key=tab-r[i].key; tab-r[i].key=tab-r[1].key; tab-r[1].key=tab-r[0].key; /*上述3条语句为将堆中最小元素和最后一个元素交换*/ sift(tab,1,i-1); } } 算法10.7 堆排序算法 10.4交换排序 交换排序的基本思路: 对待排序记录两两进行排序码比较,若不满足排序顺序则交换这对记录,直到任何两个记录的排序码都满足排序要求为止。 10.4.1 冒泡排序 冒泡排序 第1趟,对所有记录从左到右每相邻两个记录的排序码进行比较,如果这两个记录的排序码不符合排序要求,则进行交换,这样一趟做完,将排序码最大者放在最后一个位置; 第2趟对剩下的n-l个待排序记录重复上述过程,又将一个排序码放于最终位置,反复进行n-l次,可将n-l个排序码对应的记录放至最终位置,剩下的即为排序码最小的记录,它在第1的位置处。 如果在某一趟中,没有发生交换,则说明此时所有记录已经按排序要求排列完毕,排序结束。 void bubblesort(table *tab) { int i,j,done; i=1;done=1; while(i=tab-lengthdone) /*最多进行tab-length次冒泡,如没有发生交换则结束*/ { done=0; for(j=1;j=tab-length-i;j++) if(tab-r[j+1].keytab-r[j].key) { tab-r[0].key=tab-r[j].key; tab-r[j].key=tab-r[j+1].key; tab-r[j+1].key=tab-r[0].key; done=1; } i++; } } /*算法10.8 冒泡排序算法*/ * * 李云清 杨庆红 揭安全 第10章 内排序 排序是数据处理过程中经常使用的一种重要的运算,排序的方法有很多种,本章主要讨论内排序的各种算法,并对每个排序算法的时间和空间复杂性以及算法的稳定性等进行了讨论。 10.1 排序的基本概念 假设一个文件是由n个记录R1,R2,…,Rn组成,所谓排序就是以记录中某个(或几个)字段值不减(或不增)的次序将这n个记录重新排列,称该字段为排序码。能唯一标识一个记录的字段称为关键码,关键码可以作为排序码,但排序码不一定要是关键码。 按排序过程中使用到的存储介质来分,可以将排序分成两大类:内排序和外排序。 内排序是指在排序过程中所有数据均放在内存中处理,不需要使用外存的排序方法。而对于数据量很大的文件,在内存不足的情况下,则还需要使用外存,这种排序方法称为外排序。 排序码相同的记录,若经过排序后,这些记录仍保持原来的相对次序不变,称这个排序算法是稳定的。否则,称为不稳定的排序算法。 评价排序算法优劣的标准 : 首先考虑算法执行所需的时间,这主要是用执行过程中的比较次数和移动次数来度量; 其次考虑算法执行所需要的附加空间。 当然,保证算法的正确性是不言而喻的,可读性等也是要考虑的因素。 排序算法如未作特别的说明,使用的有关定义如下 : /*常见排序算法的头文件,文件名table.h*/ #define MAXSIZE 100 /*文件中记录个数的最大值*/ typedef int keytype; /*定义排序码类型为整数类型*/ typedef struct{

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档