常用排序算法的比较.doc_第1页
常用排序算法的比较.doc_第2页
常用排序算法的比较.doc_第3页
常用排序算法的比较.doc_第4页
常用排序算法的比较.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆科技学院 数据结构课程设计报告 重庆科技学院数据结构课程设计报告 学 院: 电气与信息工程学院 专业班级: 计科2012 学生姓名: 马赛克 学 号: 马赛克 设计地点(单位) 计算机基础自主学习中心 设计题目: 常用排序算法的比较 完成日期: 2013 年 7 月 12 日 指导教师评语: _成绩(五级记分制): _ 指导教师(签字): _重庆科技学院课程设计任务书设计题目:常用排序算法的比较学生姓名马赛克课程名称数据结构课程设计专业班级计科2012-03地 点计算机基础自主学习中心起止时间2013.7.1-2013.7.12设计内容及要求利用随机函数产生N个随机整数,采用多种方法对这些数进行排序,然后分析各自的所需的排序时间找出较快的排序算法。1) 常用的排序算法有直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序等,分别应用这些排序算法对同一组数据排序,并把排序后的结果保存在不同的文件中。2)统计每一种排序算法所耗费的时间(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的算法。注:在完成以上要求后,还能对比其它的排序算法,适当加分。设计参数 测试数据要求:随机产生100000 个以上的随机整数,并保存在文本文件中。排序后的数据和所需的时间也保存在各自的txt文件中。进度要求2013.7.1 完成任务的讲解、并接受课程设计任务,选定课程设计的题目2013.7.2 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法2013.7.3-2013.7.5 程序设计及编码,上机调试2013.7.8 对程序进行调试,设计测试用例进行测试2013.7.9 整理课程设计的过程、并进行总结,完善程序功能2013.7.10 编写课程设计报告初稿2013.7.11 完善课程设计报告、并准备答辨2013.7.12 提交课程设计报告和程序,进行答辨参考资料1严蔚敏 吴伟民, 数据结构,清华大学出版社,2007.32程杰 ,大话数据结构,清华大学出版社,2011.63(美)Stephen Prata, C Primer Plus中文版(第五版),人民邮电出版社,2005.2其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任:易军 指导教师:向毅/黄永文 2013年 6月 20日摘 要数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素和集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率,处理各种问题。该程序是用C语言编写的,它充分体现数据结构的理念与算法的魅力。该程序植入多种排序方法,这些排序方法的算法各具有特色,利用多种算法达到同一效果,正所谓“条条大路通罗马”。并且,该程序还收集各算法的运行时间,通过对耗时的比较,为用户挑选出两种最优化的排序方法。关键字:排序 逻辑运算 数据结构 时间复杂度目录摘 要II目录III1.需求分析11.1问题描述11.2基本要求和目的12. 程序设计22.1 概述22.2程序运行流程图22.3主要算法的具体逻辑分析22.3主要算法的具体逻辑分析32.3.1直接插入排序32.3.2折半查找插入排序32.3.3希尔排序42.3.4冒泡排序.52.3.5快速排序52.3.6简单选择排序72.3.7堆排序72.3.8 归并排序93. 程序测试113.1 运行的主界面113.2随机数的产生113.3 排序完成界面123.4 进入菜单133.5 按照菜单提示操作144. 总结16参考文献19II1.需求分析1.1问题描述排序是计算机程序设计中的一项重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个相值有序的序列。排序在现实生活中具有广泛的应用,如电话簿的按姓名排序,帮助快速查找联系人;考试成绩的排序能够定位知识技能掌握更好的人,帮助公司挑选人才;比赛成绩的排序帮助了解选手平时训练的程度和参加比赛时发挥的状态;公司业绩的排序帮助管理人员掌握谁更努力工作,给公司创造了更大的效益。因此,学习排序算法,对排序进行研究、实践,能够很好的帮助我们练习。1.2基本要求和目的基本要求:随机产生100000个随机数,利用编写的排序法,分别实现对这些随机数的排序整合,计算各自运行的时间,并将排好的有序序列和运算耗时输入到各自对应的文件中。目的:1. 巩固和加深学生对数据结构算法的理解,提高综合运用所学课程知识的能力;2. 通过各个排序算法的实现,练习包括文件的读写、动态内存的申请、函数的应用、指针的应用等多种最基本的C语言操作;3. 锻炼学生的动手能力与培养其独立思考的能力。2. 程序设计2.1 概述该程序用typedef struct_TimeChar Name20; / 算法名称Double Num;/运算所需时间Time;利用结构体Time储存排序算法名称,以及算法排序所用具体时间。这样的定义,方便了在比较时间长短时,能够对应的知道算法名称。从而更方便的判断哪种算法比较优化。在具体运算中,该程序代码的具体功能如下:GetRandom():按照用户的需要,输入所需测试的随机数个数,产生随机数至文件里;rRandom():利用文件指针,将文件里的数据读写到程序里利用指针申请的动态内存当中;InsertSort():直接插入排序;BinarySort():折半查找插入排序;ShellSort():希尔排序;BubbleSort():冒泡排序;QuickSort():快速排序;SelectSort():简单选择排序;HeapSort():堆排序;MergeSort():归并排序;Fprintf():将排序好的数据记录到文件当中;TimeSort():利用Time的指针,对存入Time的动态内存中的元素的关键字Num进行排序,找出耗时最短时间的两种排序方法;IntoMenu():程序人性化体现,按照菜单提示轻松使用该程序。进入菜单打印详细耗时输入所需随机数个数程序自动进入排序2.2程序运行流程图寻找耗时最短排序法退出2.3主要算法的具体逻辑分析2.3.1直接插入排序直接插入排序的主要思路是,将待排序的数值不断的插入到有序段中,将有序段逐渐扩大,知道所有数值进入有序段中。InsertSort():for( i = 1; i = Num; i+)p0 = pi;j = i -1;while( p0 pj)pj +1 = pj;/将大于pi的数往后移动j-;pj +1 = p0;亮点:将顺序表中的p0(第一个元素)作为排序的哨兵,不用于存储有效数据,用来保存第i个元素pi的副本,使不导致因为记录后移而丢失pi的内容。还在查找循环中“监视”下标变量j是否越界。防止数据溢出造成错误。2.3.2折半查找插入排序该方法,在直接插入排序的思路之上,将查找方式折半查找植入到算法当中。折半查找,先取有序段的中间元素与查找值进行比较。如查找值小于中间元素,则再取低半部的中间元素与查找值进行比较。如此重复知道查找成功或最终未找到这个数为止。与直接插入排序法相比,折半查找排序法减少了与关键字相比较的次数,从而提高了算法的效率。BinarySort():for( i = 1; i = Num; i+)p0 = pi;low = 1;high = i -1;while(low = high)/寻找有序列中待插入值的位置m = (low + high)/2;if(p0 high ; j-)/将找到的待插入值应在的位置腾出(往后移动其他数据)pj+1 = pj;phigh +1 = p0;/插入值代码中,有外层for循环负责Num 1次扫描,完成寻找序列中所有记录的插入位置,内层的while循环就是通过折半查找的方法定位当前元素在有序段中的位置。为了把当前元素复制到有序断种,需要把大于当前元素关键字的元素往后移动,内层的for循环就是移动大于当前元素关键字的元素,最后在外循环里将当前元素的值插入到正确位置。2.3.3希尔排序希尔排序是对直接插入排序算法的改进,通过减少元素的移动来优化算法,提高算法的效率。其基本思想是,将待排序的记录分成几组,每组中元素都比原来的序列少,从而减少参与直接插入排序的数据量,在各组中分别进行直接插入排序。通过几次排序之后,记录的排列已经基本上有序,这时候再对所有的记录实施直接插入排序。ShellSort():for( d = (Num+1) / 2; d = 1; d = d/2) /设置排序的步长d,每次步长减半,直到减到1for( i = d+1; i 0 & p0 pj)pj +d = pj;j = j - d;pj + d = p0;具体步骤描述:待排序的记录为Num个,先选取整数 d (d= 1; i-)for( j = Num; j swap; j-)if(pj pj -1)/如果“轻”的元素在下边,则将其与上一个元素交换位置p0 = pj -1;pj - 1 = pj;pj = p0;swap+;/监控排序次数基本过程和算法:第一遍冒泡排序,首先第Num个元素与第Num 1个元素比较,逆序则交换;然后第Num -1元素与第Num 1个元素比较;直到第二个元素与第一个元素比较为止。结果,关键字最小的元素放在第一的位置。第二遍冒泡排序,除了对第一个之外的Num -1个元素进行相同操作,结果次小元素放在第二的位置上。在排序过程中监控比较次数,当比较次数为 temp为 Num -1时,排序过程结束,所有元素都已经有序。2.3.5快速排序快速排序的基本思想是,通过一轮排序将序列分割成独立的两部分,其中一部分序列的关键字均比另一部分关键字小。继对长度缩短的序列进行同样的分割,最后达到整体有序。在排序过程中,由于已经分开的两部分的元素不再需要进行比较,所以减少了比较次数,提高了排序效率,降低了排序时间。QuickSort():temp = px;while( i = temp)&(j i)/j向前搜索,寻找关键字小于基准值的位置j-;if(j i)pi = pj;i+;while(pi = temp) & ( i j)/i 向后搜索,寻找关键字大于基准值的位置i+;if( i x)QuickSort(p, x, i-1);if( j+1 y)QuickSort(p, j+1, y);首先,在序列p中选取一个中轴值px,而后将p分开成为两个部分,其中左边的部分中的元素均小于或者等于px,右边部分的元素均大于或等于中轴值,而后通过递归调用快速排序的过程分别对这两个部分进行排序,最后将这两个部分产生的结果合并即可得到最后的排序序列。关于“基准值”,我使用的是第一个记录的关键字值。数组中待排序的记录中有j个记录的关键字小于基准值,这些记录就放在数组的最左边的k个位置(不包括p0)上,而大于基准值的记录就放在数组最右边的Num j个位置上。基准值的位置的下标就是j。第一次划分之后,再用相同的算法对“基准值”左右子序列分别进行类似的操作,其中一个子序列有j个记录,另一个子序列有Num -(k+1)个记录。依此递归执行,知道每个子序列中的记录个数不超过一个为止,排序过程结束。基本过程与算法:首先选第一个记录作为枢轴附设两个指针i和j分别指向第一个记录和最后一个记录。指针j向前搜索逐个记录与基准值进行比较,直到发现小于基准值的记录为止,将其与枢轴记录相互交换。指针i向后搜索逐个记录与基准值进行比较,直到发现大于基准值的记录为止,将其与枢轴记录相互交换。重复上述步骤直到 i = j为止。完成一轮排序,完成一次分割,对前后两个子表按上述原则再分割,知道所有子表的表长不超过1为止。2.3.6简单选择排序简单选择排序的基本思想是,首先从序列中选出关键字最小的记录送到最前位置,再从余下的序列中选取关键字最小的记录送到第二的位置,直至寻列中所有的记录都已经选择为止。SelectSort():for( i = 1; i i; j-)if(pmin pj)min = j;p0 = pmin;/利用p0中介交换pmin = pi;pi = p0;算法:对数组p,将其从小到大进行排序,首先从p1,p2,p3,pNum中选择最小值,找到之后,则将它的值与p1对换(借助p0);然后从p2,p3,p4,pNum中选择最小值,再将其与p2对换。如此进行选择和调换,对第i趟选择排序,进行Num 1次关键字比较,从Num i +1个记录中选出关键字最小的记录,并与第i个记录交换。令i从1 至Num-1,进行Num-1趟选择排序,有序序列就此形成。2.3.7堆排序堆排序是一种基于选择排序的排序方法。它是一种树形选择排序,利用堆顶记录的关键字最小这一特征,使得在当前无序区中选取最大关键字的记录变得简单。对任意的pi(i = 1,2,3)都有pi = p2 *i并且pi = p2*i+1。它的基本思想是,首先将待排序的记录序列构造成一个堆。此时,选出了堆中所有记录的最小值,然后将它从堆中移走,并将剩余的记录再调整成堆,又找次小的记录,依此类推,直到堆中最后只有一个记录位置,得到有序序列。HeapSort()for (i = n/2; i = 1; i -) sift(p , i , n); for (i = n; i 1; i -) temp = p1; p1 = pi; pi = temp;sift(p, 1 , i - 1); Sift()/筛选temp = pi;j = 2 * i; while (j = m) if (j m & pj pj+1) j +; if (temp pj) pi = pj; i = j; j = 2 * i; else break; pi = temp;算法:当前要进行筛选的节点编号为m , 堆中最后一个结点的编号为n,且pm+1至pNum之间的结点都已经满足堆的条件,则调整过程(函数Sift的功能)可以描述为:(1) 设置两个指针i和j: i指向当前的结点; j指向当前节点的左孩子结点(2*i)(2) 比较当前结点的左右孩子的关键字的值,并用j指向关键字值较大的孩子结点。(3) 用当前结点的关键字与j所指向的结点关键字的值进行比较,根据比较结果采取相应的操作,即结束筛选或交换结点内容并继续进行筛选。2.3.8 归并排序归并排序的基本思想是:将待排序文件堪称为Num个长度为1的有序子文件,把这些子文件两两归并,使得Num/2个长度为2的有序子文件;然后再把这个Num/2个有序文件的子文件两两归并,如此反复,直到最后得到一个长度为Num的有序文件为止。MergeSort()while(len Num)MergePass(p, len, Num);len *= 2;MergePassfor( i = 1; i+ 2*len-1 = Num; i = i + 2* len)Merge( p, i, i+len-1, i+ 2* len -1);if( i+ len -1 Num)/尚有两个子文件,其中最后一个长度小于lenMerge( p, i, i+len-1, Num);Merge()i = low;j = m +1;k = 0;q = (int *)malloc(sizeof(int) * high);while( i = m & j = high)qk+ = pi = pj?pi+: pj+;while( i = m)qk+ = pi+;/将plowm中剩余的复制到q中while( j= high)qk+ = pj+;/将pm+khigh中剩余的复制到q中for( k = 0, i = low; i= high; k+, i+)pi = qk; /ps:q为p相同类型的指针算法:在某趟归并中,设各子文件长度为len,则归并前p1n中有Num/len个有序子文件。调用递归并操作对子文件进行归并时,必须对子文件的个数可能是奇数、最后一个子文件的长度可能小于len这两种特殊情况进行处理:若子文件个数为奇数,则最后一个子文件无须与其他子文件归并;若子文件个数为偶数,则要注意最后一对子文件中后一个子文件的区间上限为Num。(MergePass)3. 程序测试3.1 运行的主界面该程序运行的主界面如下(图3-1):图3.1 主界面3.2随机数的产生输入所需排列的随机数的个数,即可产生对应个数的随机数在当前文件Random文件,执行后的界面如下(图3.1):图3.2 随机数产生界面3.3 排序完成界面随机数产生后,程序将自动运行排序部分,排序完成后,界面如下(图3.3):、图3.3 排序完成3.4 进入菜单按照如图3.3提示,进入菜单输入“1”,否则输入“0”退出。输入出错的的情况(图3.4):图 3.4 输入错误界面正确进入菜单界面:(图3.5)图 3.5 进入菜单3.5 按照菜单提示操作按照菜单提示,可有四种情况出现。情况一:输入“1”,运行功能1(如图3.6)图3.6 运行功能1情况二:输入“2”,运行功能2(如图3.7)图 3.7 运行功能2情况三:输入错误(图3.8)图3.8 输入错误情况四:退出程序运行(如图3.9)图 3.9 退出程序4. 总结在为期两周的课程设计里,我基本上能够算得上是全面接触排序算法。刚开始拿到题目的时候,是完全无从下手的迷茫状态,之后通过自己的分析、资料的帮助和同学老师的帮助对排序的认识便逐渐的清晰起来。各个算法的逻辑算法我都很喜欢。毕竟是前人总结下来的经验,我只是很多年之后的经验运用而已。但我确实已经被这些算法所折服。在效率方面,我也颇有感触。完成程序的第二天上午,我带着好奇准备用1000000个随机数来进行测试。从大概九点开始,一直运行到放学之后的十二点半以后。在程序运行完之前,因为必须得离开实验室的原因,当时的我既紧张又有一点小兴奋,忐忑的看着黑屏上的光标一直在跳动,可结果就是迟迟不出来。终于在我等待良久之后,结果运行出来。虽然本身是很无聊的一件事,但对我来说确实历史性的大事件。测试结果如下图。看着这些时间长度的对比,我顿时产生了颇多感触。运行时间最长的四千多秒,与运行最短的少于一秒对比起来,这就是效率最明了的体现。以小见大,平时做事也要特别注意效率问题。在编程中遇到了众多困难,很多时候并不是迎刃而解,尤其是在遇到逻辑错误的时候,常常会感觉到头昏脑胀,思维一片混乱。有时候一两个小时都解决不了某个问题。通过这次实训,我深刻的体会到在遇到困难时,绝对得保持一颗清晰的头脑,不要着急,更不要恼怒。平心静气,一步一步慢慢分析会让效果提升很多。听说有一种名为“Rubber duck debugging(小黄鸭调试法)”,有机会一定要试用一下。另一方面,完成这个任务,那种通过努力之后的成就感,也激发了我对编程的更多热爱。在未来的编程之路上,我又将会不断的提升自己,又会获得更多宝贵的经验。即使遇到挫折又如何。真是期待啊。致谢再强的一个人如果没有其他人的帮助,我相信他也不能在成功的道路上走得更远。每次写复杂一些的编程,我便很想用“编程血泪史”来为我的道路做个深刻的标记。在被编程错误困扰到的时候,谢谢同学和老师耐心的为我解答,为我调试找错,让我思路清晰化。在迷茫而不知所措的时候,谢谢同学、网友的鼓励。最后,请允许我再次献上最诚挚的感谢!谢谢你们!源代码:#include#include#include #includetypedef struct _Timechar Name20;double Num;Time;void GetRandom(FILE *fp, int Num);void Fprintf(FILE *fp, int *p, int Num);void rRandom(FILE *fp, int *p, int Num);void InsertSort(FILE *fp, int *p, int Num);void BinarySort(FILE *fp, int *p, int Num);void ShellSort(FILE *fp, int *p, int Num);void BubbleSort(FILE *fp, int *p, int Num);void QuickSort(int *p, int x, int y);void SelectSort(FILE *fp, int *p, int Num);void HeapSort(FILE *fp, int *p, int n);void Sift(int *p, int k, int n);void Merge(int *p, int low, int m, int high);void MergePass(int *p, int len, int Num);void MergeSort(int *p, int Num);void TimeSort( Time *t, int Num);void IntoMenu(int c, Time *time);int main() FILE *fpGetRand, *fprRandom, *fpWInsert, *fpBinary;FILE *fpShellSort, *fpBubble, *fpQuick, *fpSelect;FILE *fpHeap, *fpMerge;int *p = NULL;int Num, i1;clock_t start, finish; /生命start和finish是两个时间Time *time; /定义运行时间time = (Time*)malloc(sizeof(Time) * 9);printf(请输入需要做排序测试的随机数个数:);scanf(%d, &Num);/产生随机数/fpGetRand = fopen(Random.txt,w);GetRandom(fpGetRand, Num);fclose(fpGetRand);printf(nn%d个随机数产生成功!n请到当前文件的“Random.txt”中查看具体数据.nnn, Num);/读取随机数到数组中/fprRandom = fopen(Random.txt, r);p =(int*)malloc(sizeof(int)*(Num +1);rRandom(fprRandom, p, Num);fclose(fprRandom);/直接插入排序/start = clock();fpWInsert = fopen(InsertSort.txt, w);InsertSort(fpWInsert, p, Num);fclose(fpWInsert);finish = clock();fpWInsert = fopen(InsertSort.txt, aw);time1.Num = (double)(finish - start) / CLOCKS_PER_SEC;strcpy(time1.Name, 直接插入排序);fprintf(fpWInsert,%lf, time1.Num);fclose(fpWInsert);printf(成功!n直接插入排序已将有序数据成功录入到当前文件下的“InsertSort.txt”中.n);/折半查找插入排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpBinary = fopen(BinarySort.txt, w);BinarySort(fpBinary, p, Num);fclose(fpBinary);finish = clock();time2.Num = (double)(finish - start) / CLOCKS_PER_SEC;strcpy(time2.Name, 折半查找插入排序);fpBinary = fopen(BinarySort.txt, aw);fprintf(fpBinary, %lf, time2.Num);fclose(fpBinary);printf(成功!n折半查找插入排序已将有序数据成功录入到当前文件下的“BinarySort.txt”中.n);/希尔排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpShellSort = fopen(ShellSort.txt, w);ShellSort(fpShellSort, p, Num);fclose(fpShellSort);finish = clock();time3.Num = (double)(finish - start)/CLOCKS_PER_SEC;strcpy(time3.Name, 希尔排序);fpShellSort = fopen(ShellSort.txt, aw);fprintf(fpShellSort, %lf,time3.Num);fclose(fpShellSort);printf(成功!n希尔排序已将有序数据成功录入到当前文件下的“ShellSort.txt”中.n);/冒泡排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpBubble = fopen(BubbleSort.txt, w);BubbleSort(fpBubble, p, Num);fclose(fpBubble);finish = clock();time4.Num = (double)(finish - start)/CLOCKS_PER_SEC;strcpy(time4.Name, 冒泡排序);fpBubble = fopen(BubbleSort.txt,aw);fprintf(fpBubble, %lf, time4.Num);fclose(fpBubble);printf(成功!n冒泡排序已将有序数据成功录入到当前文件下的“BubbleSort.txt”中.n);/快速排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpQuick = fopen(QuickSort.txt, w);QuickSort(p, 1, Num);Fprintf(fpQuick, p, Num);fclose(fpQuick);finish = clock();time5.Num = (double)(finish - start)/CLOCKS_PER_SEC;strcpy(time5.Name, 快速排序);fpQuick = fopen(QuickSort.txt, aw);fprintf(fpQuick, %lf, time5.Num);fclose(fpQuick);printf(成功!n快速排序已将有序数据成功录入到当前文件下的“QuickSort.txt”中.n);/简单选择排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpSelect = fopen(SelectSort.txt, w);SelectSort(fpSelect, p, Num);fclose(fpSelect);finish = clock();time6.Num = (double)(finish - start)/CLOCKS_PER_SEC;strcpy(time6.Name, 简单选择排序);fpSelect = fopen(SelectSort.txt, aw);fprintf(fpSelect, %lf, time6.Num);fclose(fpSelect);printf(成功!n简单选择排序已将有序数据成功录入到当前文件下的“Random.txt”中.n);/堆排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpHeap = fopen(HeapSort.txt, w);HeapSort(fpHeap, p, Num);fclose(fpHeap);finish = clock();time7.Num = (double)(finish - start)/CLOCKS_PER_SEC;strcpy(time7.Name, 堆排序);fpHeap = fopen(HeapSort.txt, aw);fprintf(fpHeap, %lf, time7.Num);fclose(fpHeap);printf(成功!n堆排序已将有序数据成功录入到当前文件下的“HeapSort.txt”中.n);/归并排序/fprRandom = fopen(Random.txt, r);rRandom(fprRandom, p, Num);fclose(fprRandom);start = clock();fpMerge = fopen(MergeSort.txt, w);MergeSort(p, Num);Fprintf(fpMerge, p, Num);fclose(fpMerge);finish = clock();time8.Num = (double)(finish - start)/CLOCKS_PER_SEC;strcpy(time8.Name, 归并排序);fpMerge = fopen(MergeSort.txt, aw);fprintf(fpMerge, %lf, time8.Num);fclose(fpMerge);printf(成功!n归并排序已将有序数据成功录入到当前文件下的“MergeSort.txt”中.nn);printf(查看更多选项请输入“1”,否则输入“0”退出n);i1 = -1;IntoMenu(i1, time);free(p);free(time);return 0;void GetRandom(FILE *Fp, int Num)int a, i, big;srand(time(0);/设置随机数种子?big=-1; for( i=0;i Num;i+) a = rand();fprintf(Fp,%dn, a);void rRandom(FILE *fp, int *p, int Num)int i;for( i = 0; i Num; i+)fscanf( fp, %d, &pi+1);void Fprintf(FILE *fp, int *p, int Num)int i;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论