数据结构实验报告四Word格式文档下载.docx

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

数据结构实验报告四Word格式文档下载.docx

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

数据结构实验报告四Word格式文档下载.docx

提示:

使用随机数发生器产生随机测试数据;

使用系统时钟测量运行时间。

要求:

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

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

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

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

硬件:

微型计算机

软件:

Windows操作系统、MicrosoftVisualC++6.0

三、实验原理及内容

1、

2、源代码

#include<

iostream>

time.h>

usingnamespacestd;

template<

classT>

voidSwap(T&

a,T&

b)

{//交换两个数值

Ttemp;

temp=a;

a=b;

b=temp;

}

voidSelectSort(TA[],intn)

{//简单选择排序

intsmall,i,j;

for(i=0;

i<

n-1;

i++){

small=i;

for(j=i+1;

j<

n;

j++){

if(A[j]<

A[small])

small=j;

}

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

}

voidInsertSort(TA[],intn)

{//直接插入排序

for(inti=1;

i++){

intj=i;

Ttemp=A[i];

while(j>

0&

&

temp<

A[j-1]){

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

j--;

}

A[j]=temp;

voidBubbleSort(TA[],intn)

{//冒泡排序

inti,j,last;

i=n-1;

while(i>

0){

last=0;

for(j=0;

i;

if(A[j+1]<

A[j]){

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

last=j;

}

i=last;

voidQuickSort(TA[],intn)

{//快速排序

QSort(A,0,n-1);

voidQSort(TA[],intleft,intright)

{

inti,j;

if(left<

right){

i=left;

j=right+1;

do{

doi++;

while(A[i]<

A[left]&

=right);

doj--;

while(A[j]>

j>

=left);

if(i<

j)

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

}while(i<

j);

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

QSort(A,left,j-1);

QSort(A,j+1,right);

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

{//两路合并排序

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

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

while(i<

=j1&

=j2){

if(A[i]<

=A[j])

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

else

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

while(i<

=j1)

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

while(j<

j2)

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

k;

i++)

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

delete[]temp;

voidMergeSort(TA[],intn)

inti1,j1,i2,j2;

intsize=1;

while(size<

n){

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;

voidAdjustDown(TA[],intr,intj)

{//堆排序

intchild=2*r+1;

Ttemp=A[r];

while(child<

=j){

if(child<

j&

A[child]<

A[child+1])

child++;

if(temp>

=A[child])

break;

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

child=2*child+1;

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

voidHeapSort(TA[],intn)

for(inti=(n-1)/2;

i>

-1;

i--)//调整为最大堆

AdjustDown(A,i,n-1);

for(i=n-1;

0;

i--){

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

AdjustDown(A,0,i-1);

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

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

for(inti=0;

B[i]=A[i];

voidPrint(TA[],intn)

{//输出数组中的值

cout<

<

A[i]<

"

"

;

voidDataGen(TA[],intn)

{//生成随机数

inti=0;

srand((unsigned)time(NULL));

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

voidmain()

intn=60000;

int*A=newint[n];

int*B=newint[n];

clock_tstart,finish;

doubleelaps;

DataGen(A,n);

cout<

共输出随机数"

n<

个"

endl<

endl;

尚未排序前:

\n"

Copy(A,B,n);

start=clock();

QuickSort(B,n);

finish=clock();

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

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

elaps<

ms"

Print(B,n);

MergeSort(B,n);

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

HeapSort(B,n);

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

SelectSort(B,n);

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

InsertSort(B,n);

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

BubbleSort(B,n);

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

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

简单选择排序:

4422ms

直接插入排序:

2375ms

冒泡排序:

10671ms

快速排序:

16ms

两路合并排序:

31ms

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

说明:

这部分内容主要包括:

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

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

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

(二)实验心得

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

五、指导教师评语

成绩

批阅人

日期

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

当前位置:首页 > 高等教育 > 经济学

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

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