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

2020-04-17 21:10

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

} { } printf(\文件打开失败!\\n\ exit(1); //读入记录数 fscanf(fp,\ for(i=0;i

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

五 附录(源程序清单) #include #include #include #include struct LSD //抽象类型定义,队列的结构类型,由于是按LSD法进行的排序,所以命名为LSD { int *cur; //当前位置 struct LSD *next; }; #define LENGTH sizeof(struct LSD) void CreatScore(int score[10000][5]); //随机创建学生记录表score。正常高考中该表是已知的,不必创建 void savesources(int score[10000][5],int n); //将模拟创建的高考学生信息记录存放到文件中 void load(int score[10000][5]); //从学生高考记录源文件中读取记录到该二维数组中 void Collect(struct LSD d[301],int *c[10000]); //LSD法排序中的收集函数,即将分配好的记录收集到c指针数组保存 void InitDivide(struct LSD d[301]); //用于初始化临时分配数组,在每一次收集后必须做的工作 double DCSort(struct LSD d[301],int *c[10000],int n); //分配(Divide)和收集(Collect)排序的方法 double BubbleSort(int score[10000][5],int n); //冒泡法排序 void saveresults(int score[10000][5],int n); //按照用户的要求(总成绩在前多少名的学生记录),将这n条学生的记录存放到新的文件中 void Print(); //将排序结果文件中的记录数据输出到屏幕上 int main() 数据结构课程设计报告 第 13 页,共 页

{ double BubTime1, //按第一个关键字代表的学科成绩用冒泡法排序执行的时间 BubTime2, BubTime3, BubTime4, BubTimeSum, //冒泡法排序的总时间 DCTime1, //按第一个关键字代表的学科成绩用分配和收集的方法执行的时间 DCTime2, DCTime3, DCTime4, DCTimeSum; //分配和收集法排序的总时间 int score[10000][5],//随机创建的模拟学生记录源数组 bubble[10000][5], //进行冒泡法排序时用来存放学生记录源数组,并且随排序进行数组中的记录发生交换 copy[10000][5]; //从模拟的学生记录源txt文件中读取学生记录到该数组 struct LSD d[301]; //分配数组,该处考虑到把总分(0-300)也列入优先级序列中,因此建立了301个队列 int *c[10000]; //用来存放收集到的学生记录 char x[5]; //存放有优先关系的学科代号序列 /*初始化c,使其与score函数\同步\ for(int i=0;i<10000;i++) c[i]=score[i]; InitDivide(d); //初始化队列 /*在实际中全部学生的高考记录是存放在一个文件中的,程序运行时是从该文件中读取的源记录数据。 *本程序要求随机模拟创建该文件,所以下面要创建每个学生的记录(CreatScore())并保存到一个文件中(save()) *调用这两个函数后就生成了全部学生的记录 */ CreatScore(score); //伪随机生成各科成绩,并将考号和总成绩一并生成在score数组中 savesources(score,10000); //将随机生成的记录信息保存在record.txt中,该文件在程序运行的时候是不变的 load(copy); //从源记录文件record.txt中读取学生记录到数组copy中 /*为了防止改变源记录,在进行冒泡法排序的时候用bubble这个数组*/ for(i=0;i<10000;i++) for(int j=0;j<5;j++) bubble[i][j]=copy[i][j]; //将源记录赋值给bubble数组 printf(\请输入您要按照哪种优先级顺序对学生成绩进行排序:比如(总分,数学,语文,英语)\\n就请输入smce(即各科的英文首字母序列)\ scanf(\ //输入进行排序的关键字的优先序列 for(i=3;i>=0;i--) { printf(\现在程序正在按%c代表的学科进行成绩分配,请稍后…\ switch(x[i]) { case 'c': //Chinese DCTime1=DCSort(d,c,0); //按语文这个关键字用分配和收集法排序,并返回时间 BubTime1=BubbleSort(bubble,0); //按语文这个关键字用冒泡法排序 break; case 'm': //Math DCTime2=DCSort(d,c,1); BubTime2=BubbleSort(bubble,1); 数据结构课程设计报告 第 14 页,共 页

break; case 'e': //English DCTime3=DCSort(d,c,2); BubTime3=BubbleSort(bubble,2); break; case 's': //Sum DCTime4=DCSort(d,c,3); BubTime4=BubbleSort(bubble,3); break; default: printf(\您输入的科目代号错误\\n\//输入代号错误提示 break; } } DCTimeSum=DCTime1+DCTime2+DCTime3+DCTime4; //分配排序法的总时间等于按照各个关键字进行排序的分时间的和 BubTimeSum=BubTime1+BubTime2+BubTime3+BubTime4; printf(\用分配和收集的方法排序,执行的总时间为:%.3f\\n\ printf(\用冒泡法排序,执行的总时间为:%.3f\\n\ printf(\请问您要提取多少条学生的成绩信息(0-10000):\ int n; scanf(\ saveresults(bubble,n); //将前n名学生的记录保存在结果文件recordresults.txt中 Print(); //从结果文件recordresults.txt中读取记录到屏幕上 return 0; } /*创建一个含有10000名学生成绩记录的score,包含语文、数学、英语、总分和学号,随机生成语文、数学、英语的成绩。 *传递的参数是成绩数组score,无返回值 */ void CreatScore(int score[10000][5]) { int i, j; srand(time(NULL)); //利用时间设置随机种子产生随机数 /*伪随机生成语文、数学、英语的成绩*/ for(i=0;i<10000;i++) { for(j=0;j<3;j++) { score[i][j]=rand()1; //成绩的范围是0-100 } } /*总分成绩初始化*/ for(i=0;i<10000;i++) { score[i][3]=score[i][0]+score[i][1]+score[i][2]; //总成绩为各科成绩之和 } /*学号的初始化*/ for(i=0;i<10000;i++) score[i][4]=i+1; //学号是按从前到后的顺序依次赋值的


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

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

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

马上注册会员

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