实验十二排序技术实验报告.docx

上传人:b****7 文档编号:15778998 上传时间:2023-07-07 格式:DOCX 页数:16 大小:69.77KB
下载 相关 举报
实验十二排序技术实验报告.docx_第1页
第1页 / 共16页
实验十二排序技术实验报告.docx_第2页
第2页 / 共16页
实验十二排序技术实验报告.docx_第3页
第3页 / 共16页
实验十二排序技术实验报告.docx_第4页
第4页 / 共16页
实验十二排序技术实验报告.docx_第5页
第5页 / 共16页
实验十二排序技术实验报告.docx_第6页
第6页 / 共16页
实验十二排序技术实验报告.docx_第7页
第7页 / 共16页
实验十二排序技术实验报告.docx_第8页
第8页 / 共16页
实验十二排序技术实验报告.docx_第9页
第9页 / 共16页
实验十二排序技术实验报告.docx_第10页
第10页 / 共16页
实验十二排序技术实验报告.docx_第11页
第11页 / 共16页
实验十二排序技术实验报告.docx_第12页
第12页 / 共16页
实验十二排序技术实验报告.docx_第13页
第13页 / 共16页
实验十二排序技术实验报告.docx_第14页
第14页 / 共16页
实验十二排序技术实验报告.docx_第15页
第15页 / 共16页
实验十二排序技术实验报告.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验十二排序技术实验报告.docx

《实验十二排序技术实验报告.docx》由会员分享,可在线阅读,更多相关《实验十二排序技术实验报告.docx(16页珍藏版)》请在冰点文库上搜索。

实验十二排序技术实验报告.docx

实验十二排序技术实验报告

实验十二排序技术实验

一、实验目的

1掌握各种排序算法的基本思想;

⑵掌握各种排序算法的实现方法;

⑶掌握各种排序算法的时间性能及其花费时间的计算。

⑷掌握各种排序算法所适应的不同场合。

二、实验内容

1、随机函数产生10000个随机数,用直接插入、希尔、冒泡、直接选择等排序方法排序,并统计每一种排序所花费的时间。

2、随机函数产生30000个随机数,用快速、堆、归并等排序方法排序,并统计每一种排序所花费的时间。

三、设计与编码

#include

#include

#include

usingnamespacestd;

voidShuChu(intr[],intn)

{

cout<<"输出:

";

for(inti=0;i

cout<

cout<

cout<<"*****************************************"<

}

voidInsertSort(intr[],intn)//插入排序

{

inta=r[0];

for(inti=2;i

{

r[0]=r[i];

for(intj=i-1;r[0]

r[j+1]=r[j];

r[j+1]=r[0];

}

r[0]=a;

}

voidShellSort(intr[],intn)//希尔排序

{

inta=r[0];

for(intd=n/2;d>=1;d=d/2)

{

for(inti=d+1;i<=n-1;i++)

{

r[0]=r[i];

for(intj=i-d;j>0&&r[0]

r[j+d]=r[j];

r[j+d]=r[0];

}

}

r[0]=a;

}

voidBubbleSort(intr[],intn)//冒泡排序

{

intexchange=n-1;

while(exchange!

=0)

{

intbound=exchange;exchange=0;

for(intj=1;j

if(r[j]>r[j+1])

{

ints=r[j+1];

r[j+1]=r[j];

r[j]=s;

exchange=j;

}

}

}

voidSelectSort(intr[],intn)//选择排序

{

for(inti=0;i

{

intindex=i;

for(intj=i+1;j<=n-1;j++)

if(r[j]

index=j;

if(index!

=i)

{

inta=r[index];

r[index]=r[i];

r[i]=a;

}

}

ShuChu(r,n);

}

intPartition(intr[],intfirst,intend)//快速排序一次划分算法

{

inti=first;

intj=end;

r[0]=r[i];

intp=r[i];

while(i

{

while(i

if(i

{

inta=r[j];

r[j]=r[i];

r[i]=a;

i++;

}

while(i

if(i

{

intb=r[j];

r[j]=r[i];

r[i]=b;

j--;

}

}

returni;

}

voidQuickSort(intr[],intfirst,intend)//快速排序算法

{

inta=r[0];

if(first

{

intpivot=Partition(r,first,end);

QuickSort(r,first,pivot-1);

QuickSort(r,pivot+1,end);

}

r[0]=a;

}

voidSift(intr[],intk,intm)//筛选法调整堆的算法

{

inti=k;

intj=2*i;

while(j<=m)

{

if(j

if(r[i]>=r[j])break;

else

{

inta=r[j];

r[j]=r[i];

r[i]=a;

i=j;

j=2*i;

}

}

}

voidHeapSort(intr[],intn)//堆排序算法

{

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

Sift(r,i,n-1);

for(i=2;i

{

inta=r[n-i+1];

r[n-i+1]=r[1];

r[1]=a;

Sift(r,1,i-1);

}

}

voidMerge(intr[],intr1[],ints,intm,intt)//一次归并算法

{

inti=s;

intj=m+1;

intk=s;

while(i<=m&&j<=t)

{

if(r[i]<=r[j])r1[k++]=r[i++];

elser1[k++]=r[j++];

}

if(i<=m)while(i<=m)

r1[k++]=r[i++];

elsewhile(j<=t)

r1[k++]=r[j++];

}

voidMergePass(intr[],intr1[],intn,inth)

{

inti=1;

inta=n-2*h+1;

while(i<=a)

{

Merge(r,r1,i,i+h-1,i+2*h-1);

i+=2*h;

}

if(i

elsefor(intk=i;k<=n;k++)

r1[k]=r[k];

}

voidMergeSort(intr[],intr1[],intn)//归并排序非递归算法

{

inth=1;

while(h

{

MergePass(r,r1,n,h);

h=2*h;

MergePass(r1,r,n,h);

h=2*h;

}

}

voidmenu()

{

cout<<"排序技术实验"<

cout<<"*********************"<

cout<<"1.直接插入排序"<

cout<<"2.希尔排序"<

cout<<"3.冒泡排序"<

cout<<"4.直接选择排序"<

cout<<"5.快速排序"<

cout<<"6.堆排序"<

cout<<"7.归并排序"<

cout<<"8.退出"<

}

intmain()

{

clock_tstart,end;

menu();

intflag=1;

while(flag)

{

inti;

cout<<"*****************************************"<

cout<<"请输入你所需要的选项:

";

cin>>i;

switch(i)

{

case1:

{

intsrand(30001);

inta[30001];intn;

cout<<"请输入随机产生的随机数的个数:

";

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"直接插入排序结果:

"<

start=clock();

InsertSort(a,n);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;

}

case2:

{

intsrand(30001);

inta[30001];intn;

cout<<"请输入随机产生的随机数的个数:

";

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"希尔排序结果:

"<

start=clock();

ShellSort(a,n);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;}

case3:

{intsrand(30001);

inta[30001];intn;

cout<<"请输入随机产生的随机数的个数:

";

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"冒泡排序结果:

"<

start=clock();

BubbleSort(a,n);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;}

case4:

{intsrand(30001);

inta[30001];intn;

cout<<"请输入随机产生的随机数的个数:

"<

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"直接选择排序结果:

"<

start=clock();

SelectSort(a,n);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;}

case5:

{intsrand(30001);

inta[30001];intn;

cout<<"请输入随机产生的随机数的个数:

";

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"快速排序结果:

"<

start=clock();

QuickSort(a,1,n-1);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;

}

case6:

{intsrand(30001);

inta[30001];intn;

cout<<"请输入随机产生的随机数的个数:

";

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"堆排序结果:

"<

start=clock();

HeapSort(a,n);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;}

case7:

{intsrand(30001);

inta[30001];intn;

inta1[30001];

cout<<"请输入随机产生的随机数的个数:

";

cin>>n;

a[0]=0;

for(inti=1;i

a[i]=rand();

ShuChu(a,n);

cout<<"归并排序结果:

"<

start=clock();

MergeSort(a,a1,n-1);

end=clock();

ShuChu(a,n);

doublecount=(double)(end-start)/1000;

cout<<"排序所用时间为:

"<

break;}

case8:

{flag=0;

break;}

default:

{cout<<"错误!

!

!

"<

break;}}}

return0;}

四、运行与调试

a)在调试程序的过程中遇到什么问题,是如何解决的?

答:

数据的下标经常出错,数组的第一个数应是a[0].

b)设计了哪些设计数据?

测试结果是什么?

答:

程序设计了对随机函数产生10000个随机数进行直接插入、希尔、冒泡、直接选择等排序方法排序,并统计每一种排序所花费的时间;对随机函数产生30000个随机数进行快速、堆、归并等排序方法排序,并统计每一种排序所花费的时间。

结果实现各种排序方法的排序,并统计了排序所需时间。

c)程序运行的结果如何?

因排序结果太长,故只设计显示排序时间

五、实验小结

本实验通过不同的算法实现相同的排序,不同的排序算法时间性能亦不同,只要了解算法间的原理,程序就比较简单了,稍微要注意的是数组的下标问题,总的来说,本实验让我对个算法的理解更加深刻,也对数据结构的学习更深入,但还不够熟悉,需多多练习。

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2