排序实验报告.docx
- 文档编号:9269351
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:10
- 大小:108.81KB
排序实验报告.docx
《排序实验报告.docx》由会员分享,可在线阅读,更多相关《排序实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
排序实验报告
学生课程实验报告书
09级计算机科学与信息技术系
网络工程专业02班
学号:
0930040250姓名:
郭文明
2010-2011学年第二学期
实验项目:
实验六排序
实验目的:
①熟悉掌握各种排序的方法,深刻理解排序算法及其执行的过程。
②学会分析各种排序算法的性能;
③了解各种方法的优缺点,对于实际问题能够选择一种较好的排序方案。
实验内容:
一、最优服务问题
【问题描述】
设有n个顾客同时等待一项服务。
顾客i需要的服务时间为ti(1<=i<=n)。
应如何安排n个顾客的服务次序才能使平均等待时间达到最小?
平均等待时间是n个顾客等待服务时间的总和除以n。
【编程任务】
对于给定的n个顾客需要的服务时间,编程计算最优服务次序。
【数据输入】
输入数据:
第一行是正整数n,表示有n个顾客。
接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。
【结果输出】
将编程计算出的最小平均等待时间输出在屏幕上
输入文件示例
输出文件示例
10
532.00
56121991000234335599812
【实验程序如下】
#include
voidInsertSort(inta[],intn)
{
//希尔排序
inti,j,x,gap=n/2;
floatsum=0,avg=0;
while(gap>0)
{
for(i=gap;i { j=i-gap; while(j>=0) { if(a[j]>a[j+gap]) { x=a[j];a[j]=a[j+gap];a[j+gap]=x; j=j-gap; } else j=-1; } } gap=gap/2; } for(i=0;i sum=sum+(n-i)*a[i]; avg=sum/n; printf("最小平均等待时间为%f\n",avg); } voidmain() { inti,n; printf("请输入顾客个数n的值: "); scanf("%d",&n); intc[100]; printf("请输入每个顾客的需要的服务时间: \n"); for(i=0;i scanf("%d",&c[i]); InsertSort(c,n); } 【实验输出】 二、众数问题 【问题描述】 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。 多重集S中重数最大的元素称为众数。 例如,S={1,2,2,2,3,5}。 多重集S的众数是2,其重数为3。 【编程任务】 对于给定的由n个自然数组成的多重集S,编程计算S的众数及其重数。 【数据输入】 输入数据由文件名为mode*.in的文本文件提供。 文件的第1行多重集S中元素个数n;接下来的n行中,每行有一个自然数。 【结果输出】 程序运行结束时,将计算结果输出到文件mode*.out中。 输出文件有2行,第1行给出众数,第2行是重数。 输入文件示例 输出文件示例 mode0.in mode0.out 6 1 2 2 2 3 5 2 3 【实验程序如下】 #include #defineN100 voidmain() { inta[N]; intcount[N]={0}; inti,n,value,max=0,max_index=0; printf("请输入多重集S的元素个数n的值: "); scanf("%d",&n); printf("请输入多重集S的%d个元素: \n",n); for(i=0;i scanf("%d",&a[i]); for(i=0;i { value=++count[a[i]-1]; if(value>max) { max=value; max_index=a[i]; } } printf("出现次数最多的数%d,共出现%d次\n",a[max_index],max); } 【实验输出】 三、士兵站队问题(选作) 【问题描述】 在一个划分成网格的操场上,n个士兵散乱地站在网格点上。 网格点由整数坐标(x,y)表示。 士兵们可以沿网格边上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。 按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。 如何选择x和y的值才能使士兵们以最少的总移动步数排成一列。 【编程任务】 计算使所有士兵排成一行需要的最少移动步数。 【数据输入】 由文件sol*.in提供输入数据。 文件的第1行是士兵数n,1n10000。 接下来n行是士兵的初始位置,每行2个整数x和y,-10000x,y10000。 【结果输出】 程序运行结束时,将计算结果输出到文件sol*.out中。 文件的第1行中的数是士兵排成一行需要的最少移动步数。 输入文件示例 输出文件示例 sol0.in sol0.out 5 12 22 13 3-2 33 8 【实验程序如下】 #include #include #include voidmain() { inta[10000],b[10000],c[10000]; intn,i,j,mid_b=0,min_c=0,mid_a=0,sum=0,min_a,min_b; printf("请输入士兵的个数\n"); scanf("%d",&n); printf("请输入%d个士兵的位置\n",n); for(i=0;i scanf("%d%d",&a[i],&b[i]); for(i=0;i { for(j=i+1;j { if(a[i]>=a[j]) { min_a=a[i]; a[i]=a[j]; a[j]=min_a; } if(b[i]>=b[j]) { min_b=b[i]; b[i]=b[j]; b[j]=min_b; } } } for(i=0;i c[i]=a[i]-i; for(i=0;i { for(j=i+1;j { if(c[i]>=c[j]) { min_c=c[i]; c[i]=c[j]; c[j]=min_c; } } } if(n%2==0) { mid_a=c[(n-1)/2]; mid_b=b[(n-1)/2]; } else { mid_a=c[n/2]; mid_b=b[n/2]; } for(i=0;i sum=abs(b[i]-mid_b)+abs(a[i]-mid_a-i)+sum; printf("需要移动的最少步数是%d步\n",sum); } 【实验输出】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)