ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:168.19KB ,
资源ID:9520856      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9520856.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(存储管理查找和排序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

存储管理查找和排序.docx

1、存储管理查找和排序存储管理、查找和排序题目:内部排序算法比较问题描述:通过随机数据比较各算法的关键字比较次数与移动次数基本要求:至少比较快速排序与堆排序。对结果进行简单分析一、 需求分析1排序算法的基本操作大多数排序算法都有两个基本的操作:(1) 比较两个关键字的大小;(2) 改变指向记录的指针或移动记录本身。注意:第(2)种基本操作的实现依赖于待排序记录的存储方式。2待排文件的常用存储方式(1) 以顺序表(或直接用向量)作为存储结构排序过程:对记录本身进行物理重排(即通过关键字之间的比较判定,将记录移到合适的位置)(2) 以链表作为存储结构排序过程:无须移动记录,仅需修改指针。通常将这类排序

2、称为链表(或链式)排序;(3) 用顺序的方式存储待排序的记录,但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)排序过程:只需对辅助表的表目进行物理重排(即只移动辅助表的表目,而不移动记录本身)。适用于难于在链表上实现,仍需避免排序过程中移动记录的排序方法。3排序算法性能评价(1) 评价排序算法好坏的标准评价排序算法好坏的标准主要有两条:1 执行时间和所需的辅助空间2 算法本身的复杂程度(2) 排序算法的空间复杂度若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间是O(1),则称之为就地排序(In-PlaceSou)。非就地排序一般要求的辅助空间为O(n)。(3) 排

3、序算法的时间开销大多数排序算法的时间开销主要是关键字之间的比较和记录的移动。有的排序算法其执行时间不仅依赖于问题的规模,还取决于输入实例中数据的状态。快速排序:快速排序有两个方向,左边的i下标一直往右走,当ai acenter_index。如果i和j都走不动了,i j。交换aj和acenter_index,完成一趟快速排序。在中枢元素和aj交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11,现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和 aj 交换的时刻。堆排

4、序:我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n 的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n /2-1, n/2-2, .1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。二、概要设计 模块: 结构体 快速排序算法 堆排序算法三、

5、详细设计 1. 结构体: typedef struct int length; int num101;NUM; 2快速排序 void quick_sort(NUM &a,int l,int h,int &move_count,int &judge_count) int low=l; int high=h; int m; if (low0;-i) heap_adjust(a,i,a.length,move_count,judge_count); for (int i=a.length;i1;-i) swap(a.num1,a.numi); move_count+=3; heap_adjust(a

6、,1,i-1,move_count,judge_count); 四、调试分析1 对正序、逆序和若干不同程度随机打乱的可排序表,进行各种排序方法的比较测试,得到的测试数据具有较好的典型性和可比较性。通过设计和实现指定程度的随机乱序算法,对伪随机数序列的产生有了具体的认识和实践。2 本实习作业采用循序渐进的策略。首先设计和实现可排序表的建立和打乱操作,然后用插入排序验证各种内部辅助操作的正确性,进而逐个加入其他排序算法,最后完成对测试结果比较表的显示。调试能力有了提高。五、用户手册 统计在快速排序、堆排序、直接插入排序中,数字的移动次数和判断次数。并且输出排序后的序列. 输入数字的长度和数字然后回

7、车六、测试结果测试快速排序堆排序比较次数少乱否差异小稍多乱否差异很小移动次数第二少乱否差异较小稍多乱否差异很小七、源程序清单#include stdafx.h#include using namespace std;typedef struct int length; int num101;NUM;int one_quick_sort(NUM &a,int L,int H,int &move_count,int &judege_count) int privotkey=a.numL; int low=L; int high=H; a.num0=privotkey; +move_count; w

8、hile(lowhigh) while(lowhigh&privotkey=a.numhigh) -high; +judege_count; a.numlow=a.numhigh; +move_count; while(low=a.numlow) +low; +judege_count; a.numhigh=a.numlow; +move_count; a.numlow=privotkey; +move_count; return low;void quick_sort(NUM &a,int l,int h,int &move_count,int &judge_count) int low=l

9、; int high=h; int m; if (lowhigh) m=one_quick_sort(a,low,high,move_count,judge_count); quick_sort(a,1,m-1,move_count,judge_count); quick_sort(a,m+1,high,move_count,judge_count); int judge(int a,int b,int &count) +count; if(a=b) return 1; return 0;void heap_adjust(NUM &a,int s,int m,int &move_count,i

10、nt &judge_count) int rc=a.nums; +move_count; for (int j=2*s;j=m;j*=2) if (j0;-i) heap_adjust(a,i,a.length,move_count,judge_count); for (int i=a.length;i1;-i) swap(a.num1,a.numi); move_count+=3; heap_adjust(a,1,i-1,move_count,judge_count); int _tmain(int argc, _TCHAR* argv) NUM a,b,c; coutplease inpu

11、t length of the number:a.length; b.length=a.length; c.length=b.length; coutplease input the number:endl; for (int i=1;ia.numi; b.numi=a.numi; c.numi=a.numi; int move_count=0; int judge_count=0; /快速排序 coutquick sort:endl; quick_sort(a,1,a.length,move_count,judge_count); coutmove_judge:move_count judg

12、e_count:judge_countendl ; coutafter quick_sort the number is:endl; for (int i=1;i=a.length;i+) couta.numi ; coutendlendl; /堆排序 move_count=0; judge_count=0; coutheap_sort sort:; heap_sort(c,move_count,judge_count); coutmove_count:move_count judge_count:judge_countendl; coutafter heap_sort the number is:=1;-i) coutc.numi ; coutendl; return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1