1实验报告六排序(学科:数据结构)姓名单位班级学号实验日期成绩评定教师签名批改日期实验名称:实验六排序6.1泡沫法排序的改进算法【问题描述】某班学生成绩信息表中每个学生的记录包括各门功课的成绩和平均成绩,以及按平均成绩的排名等信息,要求从键盘输入每个学生各门功课的成绩,计算出平均成绩,按平均成绩由高到低对信息的记录重新排序,并定出每位同学的名次,打印排序后的信息表。【基本要求】(1)建立学生成绩信息表,计算平均成绩。(2)用泡沫法对平均成绩排序,程序中要求一旦序列被排好序就结束相应排序操作。【测试数据】自行设计【实验提示】(1)用结构数组存放学生成绩信息表。(2)在某趟泡沫中没有发生元素间的交换则说明已排好序【实验报告内容】设计程序代码如下:#includestdio.h#includestring.h#defineMAX3structstudent{charname[10];floatcs;floatms;floates;floatavg;};voidsort(structstudents[],intn);voidsort(structstudents[],intn){2structstudenttemp;inti,j;for(i=1;in;i++)for(j=0;jn-i;j++)if(s[j].avgs[j+1].avg){temp=s[j];s[j]=s[j+1];s[j+1]=temp;}}voidmain(){structstudentstu[MAX];inti;printf(请输入%d位同学的姓名和各科成绩\n,MAX);for(i=0;iMAX;i++){printf(请输入第%d位学生的姓名:,i+1);scanf(%s,stu[i].name);printf(\n);printf(语文分数:);scanf(%f,&stu[i].cs);printf(\n);printf(数学分数:);scanf(%f,&stu[i].ms);printf(\n);printf(英语分数:);scanf(%f,&stu[i].es);printf(\n);stu[i].avg=(stu[i].cs+stu[i].ms+stu[i].es)/3;}sort(stu,MAX);printf(排名姓名语文数学外语平均分数\n);for(i=0;iMAX;i++){printf(%d:%6s%3.2f%3.2f%3.2f%3.2f\n,i+1,stu[i].name,stu[i].cs,stu[i].ms,stu[i].es,stu[i].avg);}}3程序运行结果如下:6.2堆排序【问题描述】阅读筛选和建堆的程序,针对某一个待排序的序列,通过人工跟踪程序的执行,完成排序的全过程【基本要求】(1)掌握建堆、筛选的基本原理和算法步骤。(2)写出主函数,试运行堆排序的程序。(3)掌握堆排序的算法程序,能针对实例按步骤人工完成建堆和排序的过程。【测试数据】自行设计。【实验提示】(1)筛选是建堆的基本算法。(2)把要排序序列看成一棵完全二叉树,用循环方式从最后一个非叶结(设序号为k)开始,逐次对序号为k,k-1,…的结点,直至根结点调用筛选算法,完成建堆。(3)不断通过堆顶元素与堆中最后一个元素的交换并筛选,完成排序。4【实验报告内容】设计程序代码如下:#includestdio.h#defineN8structNODE{intdate;};voidheapshift(structNODEa[],inti,intn){structNODEtemp;intj;temp=a[i];j=2*i;while(jn){if(j+1n&&a[j].datea[j+1].date)j++;if(temp.datea[j].date){a[i]=a[j];i=j;j=2*i;}elsebreak;}a[i]=temp;}voidheapsort(structNODEa[],intn){inti;structNODEtemp;for(i=n/2;i=1;i--)heapshift(a,i,n);for(i=n;i1;i--){temp=a[1];a[1]=a[i];a[i]=temp;heapshift(a,1,i-1);}5}voidmain(){structNODEb[N]={40,80,65,100,14,30,55,50};structNODEa[N];inti;printf(初始数据序列:);for(i=0;iN;i++){a[i+1].date=b[i].date;}for(i=1;i=N;i++){printf(%d,a[i].date);}printf(\n);printf(\n);heapsort(a,N);printf(堆排序后的数据序列:);for(i=1;i=N;i++){printf(%d,a[i].date);}printf(\n);}程序运行结果如下: