算法设计与分析排序

  • 格式:doc
  • 大小:769.50 KB
  • 文档页数:5

《算法设计与分析》实验报告

实验序号:2 实验项目名称:排序

一、实验目的及要求

1. 了解排序的定义

2.掌握合并排序、堆排序算法的实现和时间复杂度的分析

3.理解基数排序算法的思想

二、实验设备(环境)及要求

Turbo C 、VC或相近的环境

三、实验内容与步骤

1. 对给定的n个元素的数组,编写一个程序,判断该数组是否是最大堆或最小堆,所编写的算法时间复杂性是多少?

提高题(选做):

2. 学生排队问题1:

学生分散地站在操场上。假设操场的坐标由(x,y)表示,每个学生的x坐标都不相同,学生可以沿着网格上下移动,但每个格子上只能有一个学生。要求学生最后要水平的排成一排,请问学生的最少移动步数。

3. 学生排队问题2

学生分散地站在操场上。假设操场的坐标由(x,y)表示,学生可以沿着网格上下左右移动,但每个格子上只能有一个学生。要求学生最后要水平的排成一排,请问学生的最少移动步数。

四、实验结果与数据处理

实验一:

实验结果

结论 时间复杂性:O(2)

实验二:

实验结果

实验三:

详细记录程序在调试过程中出现的问题及解决方法。记录程序执行的结果。

五、分析与讨论

对上机实践结果进行分析,上机的心得体会。

六、教师评语

签名:

日期: 成绩

附源程序清单:

实验1:

#include

#define MAX 100

int test(int array[],int n)

{

int i,m,right1=0,right2=0;

for(i=1;i

{

if (i%2==0)

{

m=(i-2)/2;

if (array[m]>array[i])

right1++;

else

right2++;

}

else

{

m=(i-1)/2;

if (array[m]>array[i])

right1++;

else

right2++;

}

}

if(right1==(n-1))

return 0;

if(right2==(n-1))

return 1;

}

void main()

{

int i,n,a[MAX],right;

printf("How many number do you want to Input:\n");

scanf("%d",&n);

printf("Input %n number you want to sort\n");

for(i=0;i

scanf("%d",&a[i]);

printf("The answer.\n");

right=test(a,n);

if (right==0)

printf("it is max heap\n");

else if(right==1)

printf("it is min heap\n");

else

printf("neither max heap or min heap\n");

}

实验2:

#include

#include

#define MAX 100

struct student

{

int x;

int y;

};

struct student stu[MAX];

void main()

{

int n,i,j,len1,len,sum=10000;

printf("How many number do you want to Input:\n");

scanf("%d",&n);

for(i=0;i

{

printf("the number %d student:\n",i+1);

scanf("%d,%d",&stu[i].x,&stu[i].y);

}

for(i=0;i

{

len=0;

for(j=0;j

{ len1=abs(stu[i].y-stu[j].y);

len=len+len1;

}

if(sum>len)

sum=len;

}

printf("min steps:%d\n",sum);

}