数据结构实验报告四.docx

上传人:b****5 文档编号:3279103 上传时间:2022-11-21 格式:DOCX 页数:13 大小:612KB
下载 相关 举报
数据结构实验报告四.docx_第1页
第1页 / 共13页
数据结构实验报告四.docx_第2页
第2页 / 共13页
数据结构实验报告四.docx_第3页
第3页 / 共13页
数据结构实验报告四.docx_第4页
第4页 / 共13页
数据结构实验报告四.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构实验报告四.docx

《数据结构实验报告四.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告四.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构实验报告四.docx

数据结构实验报告四

 

实验报告

(2014/2015学年第二学期)

 

课程名称

数据结构A

实验名称

基本内排序算法的验证和性能比较,改进快速排序算法

实验时间

指导单位

指导教师

 

学生姓名

班级学号

学院(系)

专业

实验报告

实验名称

基本内排序算法的验证和性能比较,改进快速排序算法

指导教师

实验类型

设计

实验学时

2

实验时间

一、实验目的和要求

(1)验证内排序算法,分析算法的时间性能

①验证各种基本排序算法

②分析各算法的最好、最坏和平均情况时间复杂度,以渐近表示法表示。

③产生不同规模和排列状态的数据集,测量算法的实际执行时间;

④比较理论分析和实际运行时间,解释理由。

提示:

使用随机数发生器产生随机测试数据;使用系统时钟测量运行时间。

要求:

(1)理解和掌握各种基本排序算法;

(2)学会测量和分析排序算法的时间和空间性能;

(3)改进快速排序算法,理解改进的理由,验证算法改进的效果。

二、实验环境(实验设备)

硬件:

微型计算机

软件:

Windows操作系统、MicrosoftVisualC++6.0

三、实验原理及内容

1、

 

实验报告

2、源代码

#include

#include

usingnamespacestd;

template

voidSwap(T&a,T&b)

{//交换两个数值

Ttemp;

temp=a;

a=b;

b=temp;

}

template

voidSelectSort(TA[],intn)

{//简单选择排序

intsmall,i,j;

for(i=0;i

small=i;

for(j=i+1;j

if(A[j]

small=j;

}

Swap(A[i],A[small]);

}

}

template

voidInsertSort(TA[],intn)

{//直接插入排序

for(inti=1;i

intj=i;

Ttemp=A[i];

while(j>0&&temp

A[j]=A[j-1];

j--;

}

A[j]=temp;

}

}

template

voidBubbleSort(TA[],intn)

{//冒泡排序

inti,j,last;

i=n-1;

while(i>0){

last=0;

for(j=0;j

if(A[j+1]

Swap(A[j],A[j+1]);

last=j;

}

}

i=last;

}

}

template

voidQuickSort(TA[],intn)

{//快速排序

QSort(A,0,n-1);

}

template

voidQSort(TA[],intleft,intright)

{

inti,j;

if(left

i=left;

j=right+1;

do{

doi++;while(A[i]

doj--;while(A[j]>A[left]&&j>=left);

if(i

Swap(A[i],A[j]);

}while(i

Swap(A[left],A[j]);

QSort(A,left,j-1);

QSort(A,j+1,right);

}

}

template

voidMerge(TA[],inti1,intj1,inti2,intj2)

{//两路合并排序

T*temp=newT[j2-i1+1];

inti=i1,j=i2,k=0;

while(i<=j1&&j<=j2){

if(A[i]<=A[j])

temp[k++]=A[i++];

else

temp[k++]=A[j++];

}

while(i<=j1)

temp[k++]=A[i++];

while(j

temp[k++]=A[j++];

for(i=0;i

A[i1++]=temp[i];

delete[]temp;

}

template

voidMergeSort(TA[],intn)

{

inti1,j1,i2,j2;

intsize=1;

while(size

i1=0;

while(i1+size

i2=i1+size;

j1=i2-1;

if(i2+size-1>n-1)

j2=n-1;

else

j2=i2+size-1;

Merge(A,i1,j1,i2,j2);

i1=j2+1;

}

size*=2;

}

}

template

voidAdjustDown(TA[],intr,intj)

{//堆排序

intchild=2*r+1;

Ttemp=A[r];

while(child<=j){

if(child

child++;

if(temp>=A[child])

break;

A[(child-1)/2]=A[child];

child=2*child+1;

}

A[(child-1)/2]=temp;

}

template

voidHeapSort(TA[],intn)

{

for(inti=(n-1)/2;i>-1;i--)//调整为最大堆

AdjustDown(A,i,n-1);

for(i=n-1;i>0;i--){

Swap(A[0],A[i]);

AdjustDown(A,0,i-1);

}

}

template

voidCopy(TA[],TB[],intn)

{//将A数组复制到B数组中

for(inti=0;i

B[i]=A[i];

}

template

voidPrint(TA[],intn)

{//输出数组中的值

for(inti=0;i

cout<

}

template

voidDataGen(TA[],intn)

{//生成随机数

inti=0;

srand((unsigned)time(NULL));

for(i=0;i

A[i]=rand()*rand();

}

}

voidmain()

{

intn=60000;

int*A=newint[n];

int*B=newint[n];

inti=0;

clock_tstart,finish;

doubleelaps;

DataGen(A,n);

cout<<""<<"共输出随机数"<

cout<<"尚未排序前:

\n";

for(i=0;i

cout<

cout<

Copy(A,B,n);

start=clock();

QuickSort(B,n);

finish=clock();

elaps=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"--------4.快速排序--------\n"<

Print(B,n);

cout<

Copy(A,B,n);

start=clock();

MergeSort(B,n);

finish=clock();

elaps=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"--------5.两路合并排序--------\n"<

Print(B,n);

cout<

Copy(A,B,n);

start=clock();

HeapSort(B,n);

finish=clock();

elaps=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"--------6.堆排序--------\n"<

Print(B,n);

cout<

Copy(A,B,n);

start=clock();

SelectSort(B,n);

finish=clock();

elaps=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"--------1.简单选择排序--------\n"<

Print(B,n);

cout<

Copy(A,B,n);

start=clock();

InsertSort(B,n);

finish=clock();

elaps=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"--------2.直接插入排序--------\n"<

Print(B,n);

cout<

Copy(A,B,n);

start=clock();

BubbleSort(B,n);

finish=clock();

elaps=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"--------3.冒泡排序--------\n"<

Print(B,n);

cout<

}

3、给出测试数据及运行结果、实验相关结论等。

简单选择排序:

4422ms

直接插入排序:

2375ms

冒泡排序:

10671ms

快速排序:

16ms

两路合并排序:

31ms

实验报告

实验报告

四、实验小结(包括问题和解决方法、心得体会、意见与建议等)

说明:

这部分内容主要包括:

在编程、调试或测试过程中遇到的问题及解决方法、本次实验的心得体会、进一步改进的设想等。

(一)实验中遇到的主要问题及解决方法

.在进行代码输入时,没有注意到大小写、符号等,导致程序无法运行。

(二)实验心得

通过这次数据结构的实验,我了解到了数据结构不仅仅是一门理论学科,更是一门实践性的学科。

在实验过程中我发现了我的许多不足之处,如算法的不完善、语法的错误、语句的不通顺等等。

在调试程序时,经常出现因为粗心大意而犯的低级错误,导致程序不能运行,耗费了大量时间去寻找并修改这些错误。

同时,在进行程序设计时,要注意想好思路。

将每个函数的功能都要清晰的表述出来,使人能够一目了然此程序的功能。

但是完成任何一个较大的程序,都需要掌握一定的编程基础,需要不断的探索和求知过程,这样对自己编程能力的提高有较大的帮助。

当然,任何程序必须经过计算机的调试,看是否调试成功,发现错误,一个个,一步步去解决,这样就能从错误中进步。

通过实验加强了我的动手能力,以及提升了局部和统一考虑问题的思维方式。

这次的实验不仅让我巩固了以前所学过的c++知识,而且学到了很多在书本上所没有提及的知识。

通过这次实验我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的能力。

以后要多多研读数据结构这方面的书,不断提高自己的能力,能够较为轻松的完成此类实验课题。

通过这次的课程设计,我深入理解了线性表数据结构,掌握了线性表的顺序和链接两种存储表示方法。

掌握了顺序表的各种基本操作。

学会了使用线性表解决应用问题的方法。

加深了对抽象模板类、类的继承、代码重用、重载等C++语言机制的理解和使用。

五、指导教师评语

成绩

批阅人

日期

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1