数据结构课程设计 多关键字排序 高考排序 - 图文(4)

2020-04-17 21:10

数据结构课程设计报告 第 15 页,共 页

} /*保存学生记录的函数 *参数为要保存的学生记录和记录条数 *无返回值 */ void savesources(int score[10000][5],int n) { printf(\程序正在模拟创建10000条高考成绩记录并保存到文件D:\\\\recordresources.txt中,\\n请稍后…\\n\输出提示信息 int i; FILE *fp; //指向文件的指针 if((fp=fopen(\ //只写,打开或建立一个二进制文件,只允许写数据 { printf(\文件打开失败!\\n\ exit(1); } fprintf(fp,\ //将记录条数写入文件 fprintf(fp,\ //将换行符号写入文件 for(i=0;i

printf(\排序系统开始运行********************************\\n\ printf(\首先是从模拟高考成绩源文件recordsources.txt中读取数据!\\n正在读取数据,请稍后…\\n\ printf(\成功从源文件中读取 %d 条记录到排序系统中\\n\\n\ } /*将分配好的成绩数组d,收集到c指针数组保存 * 传递的参数为分配好的数组d和收集的指针数组c,无返回值 */ void Collect(struct LSD d[301],int *c[10000]) { int i, j=0; struct LSD *p; for(i=300; i>=0; i--) //因为包含总成绩(0-300)的优先级,所以共分配的队列为0-300 { if(d[i].cur!=NULL) //当前队列不空,即有学生的成绩分配到该队列 { p=&d[i]; while(p->cur!=NULL) //当前位置有学生的成绩 { c[j]=p->cur; //收集到c指针数组中 j++; p=p->next; //指针p指向该队列的下一个位置 } } } } /*初始化d数组即置空,在每一次收集后必须做的工作 *传递的参数是struct LSD d[301] */ void InitDivide(struct LSD d[301]) { for(int i=0;i<301;i++) { d[i].cur=NULL; d[i].next=NULL; } } /*\分配\和\收集\方法排序 *分配数组为d,收集数组为c *进行排序的关键字所代表的学科成绩n在分配数组中的位置就是n *传递的参数是分配数组struct LSD d[301],用来收集的指针数组int *c[10000],关键字代表的学科在数组中的下标 */ double DCSort(struct LSD d[301],int *c[10000],int n) { double time; clock_t t_start; //时间记录的开始 clock_t t_end; //时间记录的结束 t_start=clock(); //获取排序开始的时间 int j, temp; 数据结构课程设计报告 第 17 页,共 页

struct LSD *p,*p1; /*按关键字代表的学科成绩将成绩分配到d中*/ for(j=0;j<10000;j++) { temp=c[j][n]; //学生的成绩就是队列号 if(d[temp].cur==NULL) //当前队列为空 { d[temp].cur=c[j]; //将c[j]代表的学生的成绩添加到该队列中 p=&d[temp]; p1=(struct LSD *)malloc(LENGTH); p1->cur=NULL; p1->next=NULL; p->next=p1; //初始化刚刚添加了学生记录的队列 } else //当前队列不为空 { p=&d[temp]; /*循环,一直到队列的结尾*/ while(p->cur!=NULL) p=p->next; p->cur=c[j]; //将c[j]代表的学生的成绩添加到该队列中 p1=(struct LSD *)malloc(LENGTH); //新申请一个空间来存放学生成绩 p1->cur=NULL; p1->next=NULL; p->next=p1; } } //分配完毕 printf(\分配完毕,下面开始进行收集,请稍后…\\n\ Collect(d,c); //将分配好的成绩序列收集到c中 printf(\收集完毕。\\n\ InitDivide(d); //初始化分配数组 t_end = clock(); //获取结束测试点的时间 time=(double)(t_end-t_start)/CLOCKS_PER_SEC; printf(\本次分配和收集用时: %.3f s\\n\ return time; //返回执行时间 } /*冒泡法排序 *传递的参数是学生成绩记录int bubble[10000][5],关键字所代表学科成绩在数组中的下标 */ double BubbleSort(int bubble[10000][5],int n) { printf(\下面开始用冒泡法进行排序,请稍后…\\n\ double time; clock_t t_start; clock_t t_end; t_start=clock(); int temp; for(int i=0;i<10000;i++) { 数据结构课程设计报告 第 18 页,共 页

for(int j=0;j<9999-i;j++) { if(bubble[j][n]

} else printf(\文件打开成功!\\n\ char t; while(fscanf(fp,\{ if(t!=EOF) printf(\} //如果读到结束符,循环结束,输出结束 fclose(fp); //关闭文件 六 用户手册 本程序的运行环境为DOS系统,执行文件为“LSDSort.exe” 进入程序后的界面如下: 用户此时可以按路径D:\\\\recordresources.txt文档中查看模拟高考成绩表 自动计算出分配收集法和冒泡法分别所需要的时间,综合比较两种方法


数据结构课程设计 多关键字排序 高考排序 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《固定资产投资项目可行性研究投资估算编制办法》

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: