算法分析与设计实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析

学院:计算机科学与技术

学号:*********

姓名:***

2014 11 14

1、 当问题规模100 N 时,快速排序和插入排序各需多少时间?写清机器配置,列出五种

规模下各自需要的时间。按照下列表格提交: 快速排序所需时间(ms) 插入排序所需时间(ms ) 两者相差多少 N=100 0.00600 0.019000 -0.013000 N=1000 0.074000 0.724000 -0.650000 N=10000 0.032000 64.657000 -64.625000 N=100000 13.300000 50.900000 -37.600000 N=1000000

53.500000

117.700000

-64.200000

机器配置:

Window 7 32位

Cpu :Inter(R)Core(TM)******************AMD Radeon HD 6450 Graphics

程序:

#include

#include

#include

#include int a[1000000];

int b[1000000];

void QuickSort(int low ,int high)

{

long i,j;

int x;

i=low;

j=high;

x=a[i];

while(i

{

while(a[j]>=x&&i

a[i]=a[j];

while(a[i]<=x&&i

a[j]=a[i];

}

a[i]=x;

if(low<(i-1))

QuickSort(low,i-1);

if(high>(j+1))

QuickSort(j+1,high);

}

void BinaryInsertSort(int length)

{

int low,high,mid;

int i,j,m;//m为保存待插入的元素

for(i=1;i

{

m=b[i];

low=0;

high=i-1;//设置初始区

while(low<=high)

{

mid=(low+high)/2;

if(m>=b[mid])

low=mid+1;

else

high=mid-1;

}

for(j=i-1;j>=high+1;j--)//high为插入位置

b[j+1]=b[j];//后移元素,留出插入的空位b[high+1]=m;//将元素插入正确的位置

}

}

void main()

{

time_t start,finish;//time_t 相当于long

double between_time1,between_time2,between_time;

//1表示快速排序所需时间,2表示插入排序所需时间,between_time表示两种排序之间的差值

struct _timeb timebuffer1,timebuffer2;

int startm,finishm;

double total1=0,total2=0;

//1表示规模为N时,快速排序所需的累计时间,2表示规模为N是,插入排序所需的累计时间

int N,i,j;//N表示问题规模

printf("\n请输入问题的规模:");

scanf("%d",&N);

//对一堆数据进行排序,排序1000次,求其排序的平均时间

for(i=0;i<1000;i++)

{

srand((unsigned)time(NULL));//对每次的排序进行设置随机种子(即编号)

for(j=0;j

{

a[j]=rand();

b[j]=a[j];

}

//快速排序

_ftime(&timebuffer1);//计算当前时间

startm=litm;//

start=timebuffer1.time;

QuickSort(0,N-1);

// printf("\n快速排序之后的数据为:");

//for(i=0;i

// {

// printf("%d ",a[i]);

// }

_ftime(&timebuffer1);

finishm=litm;

finish=timebuffer1.time;

between_time1=difftime(finish,start);//找出时间差

between_time1=1000*between_time1+finishm-startm;

total1=total1+between_time1;

// 插入排序

_ftime(&timebuffer2);

startm=litm;

start=timebuffer2.time;

BinaryInsertSort(N);

//printf("\n插入排序之后的数据为:");

//for(i=0;i

//{

// printf("%d ",b[i]);

// }

_ftime(&timebuffer2);

finishm=litm;

finish=timebuffer2.time;

between_time2=difftime(finish,start);

between_time2=between_time2*1000+finishm-startm;//

total2=total2+between_time2;

}

printf("\n快速排序的时间(以毫秒为单位)是:%6.6f",total1/1000);

printf("\n插入排序的时间(以毫秒为单位)是:%6.6f",total2/1000);

between_time=total1/1000-total2/1000;

printf("\n两种排序相差的时间是:%6.6f\n\n",between_time);

}

2用贪心算法实现背包问题,按下表格式列出其中的五种情况,其中物品个数、背包容量、物品重量和物品价值要随机产生。

相关文档
最新文档