数据结构实验报告04.docx
- 文档编号:6613758
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:17
- 大小:243.84KB
数据结构实验报告04.docx
《数据结构实验报告04.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告04.docx(17页珍藏版)》请在冰点文库上搜索。
数据结构实验报告04
数据结构《实验4》实验报告
实验项目4:
快速排序
学 号
姓 名
课程号
实验地点
指导教师
时间
2013-12-18
评语:
成绩
教师签字
快速排序
1、预习要求:
快速排序方法。
2、实验目的:
(1)了解快速排序方法概念;
(2)理解快速排序方法的求解过程;
(3)掌握快速排序方法运算。
3、实验内容及要求:
(1)分别利用快速排序实现学生成绩管理,实现以下数据的总成绩、数学成绩的排序。
(2)完成快速排序运算的程序;
(3)给出程序和快速排序前后的结果。
4、实验设备(环境)及要求
硬件:
支持IntelPentiumⅡ及其以上CPU,内存128MB以上、硬盘1GB以上容量的微机。
软件:
配有Windows98/2000/XP操作系统,安装VisualC++。
5、实验时间:
8学时
6、该文档的文件名不要修改,存入<学号><姓名>命名的文件夹中
7、该表中的数据只需填空,已有内容不要修改
实验结果(运行结果界面及源程序,运行结果界面放在前面):
欢迎界面
Cover界面
Menu界面
选择功能1,首先显示的是按照语文成绩排序前的成绩表
按任意键后显示具体的排序过程(其中加“[]”的数字为标准元素)
继续按任意键,显示排序完成后的成绩表
选择功能2,首先显示的是按照数学成绩排序前的成绩表
按任意键后显示具体的排序过程(其中加“[]”的数字为标准元素)
继续按任意键,显示排序完成后的成绩表
选择功能3,首先显示的是按照英语成绩排序前的成绩表
按任意键后显示具体的排序过程(其中加“[]”的数字为标准元素)
继续按任意键,显示排序完成后的成绩表
最后,选择功能0,退出程序
程序代码如下
#include
#include
#include
#include
#include
#defineMaxsize100//顺序表的最大长度
intnum=0;
intflag[10];
typedeffloatKeyType;//定义关键字类型为整型
charre_choose[]={"\n\t\t\t您的选择非法,请输入正确的编号!
\n\n"};
typedefstruct
{
intNo;
floatChinese;
floatMath;
floatEnglish;
floatTotal;
}Student;
Studentstudent[Maxsize];
intrecord_num;
typedefStudentEType;
typedefstruct
{
KeyTypekey;//关键字项
ETypeelem;//其它数据项
}Record;
//记录类型
typedefstruct
{
Recordr[Maxsize+1];
intLength;//顺序表长度
}SqList;//顺序表类型
SqListL;
voidprint_Sqlist(SqList&L)
{
printf("\n第%d次排序:
\n",num);
for(intn=0;n<9;n++)
{
if(flag[n])
printf("[%4.1f]",L.r[n].key);
else
printf("%4.1f",L.r[n].key);
}
printf("\n");
}
intPartition(Recordr[],intlow,inthigh)
{//对记录序列L.r[low..high]进行一次快速排序,并将本范围的元素按标准元素分为两部分,且标准元素在这两部分之间。
KeyTypeStandardKey;
RecordTemp;
Temp=r[low];//将标准记录放入中间单元
StandardKey=r[low].key;//本范围的标准元素
while(low<=high)//从表的两端交替地向中间扫描
{
while(low
high--;
r[low++]=r[high];//将小于标准元素的数据往前放
while(low<=high&&r[low].key<=StandardKey)
low++;
r[high--]=r[low];//将大于标准元素的数据往后放
}
r[--low]=Temp;//标准元素移到正确位置
flag[low]=1;
print_Sqlist(L);//打印序列排序结果
returnlow;//返回标准位置
}
voidQsort(Recordr[],intlow,inthigh)
{//对记录序列r[low..high]进行快速排序
intStandardLoc;
if(low<=high-1)
{
num++;
StandardLoc=Partition(r,low,high);//对r[low..high]进行一次划分,并返回标准位置
Qsort(r,low,StandardLoc-1);
Qsort(r,StandardLoc+1,high);
}
}
voidQuickSort(SqList&L)
{//对顺序表L进行快速排序
Qsort(L.r,0,8);//low和high用初值0,L.length-1调用
}
voidStudent_Reacord_Print(SqList&L)
{
printf("┌─────┬───┬───┬───┬───┐\n│考号│语文│数学│英语│总分│\n");
for(inti=0;i<9;i++)
printf("├─────┼───┼───┼───┼───┤\n│%d│%5.1f│%5.1f│%5.1f│%.1f│\n",L.r[i].elem.No,L.r[i].elem.Chinese,L.r[i].elem.Math,L.r[i].elem.English,L.r[i].elem.Total);
printf("└─────┴───┴───┴───┴───┘\n");
printf("\n");
}
voidWelcome()//启动画面
{
charline[]={"━━━━━━━━━━"};
charbar[]={"...."};
inti,j,k=0,x=0,y=0;
for(i=1;i<=strlen(line)/2;)
{
system("cls");
for(j=0;j<9;j++)//改变行坐标
cout< for(j=0;j<(75-strlen(line))/2;j++)//改变列坐标 cout<<""; for(j=1;j<=i;j++)//进度显示器 cout<<"■"; for(x=strlen(line)/2;x>i;x--) cout<<"□"; if(k==4) i++; cout< for(j=0;j<(75-strlen(line))/2;j++)//行坐标定位 cout<<""; cout< cout< for(j=0;j<(65-strlen(bar))/2;j++) cout<<""; cout<<(i-1)*10<<"%Loading"; cout.write(bar,k); cout< for(j=0;j<7;j++) cout< for(j=0;j<24;j++) cout<<""; cout<<"肖家乐·制作\n"< cout<<"中南财经政法大学信息与安全工程学院"< for(j=0;j<19;j++) cout<<""; for(j=0;j<=17;j++) cout<<"─"; cout< for(j=0;j<1000000;j++);//延时效果 k++; if(k>4) k=0; } } voidCover()//封面信息 { printf("\n\n\n\n\n\n"); printf("*************************************************\n"); printf("快速排序\n\n"); printf("制作: 肖家乐\n"); printf("班级: 电商1202班\n"); printf("学号: 1209040120\n"); printf("指导老师: 孙夫雄\n"); printf("*************************************************\n"); printf("\n\n\n\t"); } voidMenu()//菜单函数 { printf("\n\n\n\n\n\n"); printf("==================================================\n\n"); printf("请选择要执行的功能\n\n"); printf("1.按语文成绩排序;\n"); printf("2.按数学成绩排序;\n"); printf("3.按英语成绩排序;\n"); printf("0.退出.\n\n"); printf("==================================================\n"); printf("\n\n\n\t\t"); } voidSwitch(intx)//功能选择 { inti; switch(x) { case1: system("cls"); for(i=0;i<9;i++) { L.r[i].key=student[i].Chinese; L.r[i].elem=student[i]; } system("cls"); break; case2: system("cls"); for(i=0;i<9;i++) { L.r[i].key=student[i].Math; L.r[i].elem=student[i]; } system("cls"); break; case3: system("cls"); for(i=0;i<9;i++) { L.r[i].key=student[i].English; L.r[i].elem=student[i]; } system("cls"); break; case0: exit(0); break; default: cout< system("pause"); break; } system("cls"); printf("排序前学生成绩表为: \n"); Student_Reacord_Print(L); system("pause"); system("cls"); QuickSort(L); printf("\n"); num=0; system("pause"); system("cls"); printf("排序后学生成绩表为: \n"); Student_Reacord_Print(L); system("pause"); } voidmain() { system("cls"); Welcome(); system("cls"); Cover(); system("pause"); floatChinese[9]={85.0,92.5,95.0,85.0,96.0,72.0,65.0,88.0,96.5}; floatMath[9]={88,91,98,87,93,76,53,94,83}; floatEnglish[9]={97.0,95.0,99.0,96.5,100.0,70.5,53.0,90.5,65.0}; floatTotal[9]; for(inti=0;i<10;i++) { Total[i]=Chinese[i]+Math[i]+English[i]; student[i].Chinese=Chinese[i]; student[i].English=English[i]; student[i].Math=Math[i]; student[i].Total=Total[i]; student[i].No=20010001+i; } while(flag) { system("cls"); Menu(); printf("\n\t请输入功能编号: "); intn; cin>>n; if(n<0||n>3) { cout< system("pause"); system("cls"); continue; } Switch(n); } return; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 04
![提示](https://static.bingdoc.com/images/bang_tan.gif)