数据结构排序技术实验报告.docx

上传人:b****5 文档编号:28518063 上传时间:2023-07-18 格式:DOCX 页数:17 大小:38.33KB
下载 相关 举报
数据结构排序技术实验报告.docx_第1页
第1页 / 共17页
数据结构排序技术实验报告.docx_第2页
第2页 / 共17页
数据结构排序技术实验报告.docx_第3页
第3页 / 共17页
数据结构排序技术实验报告.docx_第4页
第4页 / 共17页
数据结构排序技术实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构排序技术实验报告.docx

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

数据结构排序技术实验报告.docx

数据结构排序技术实验报告

班级:

计算机11-2学号:

40姓名:

朱报龙成绩:

_________

实验十二排序技术实验

一、实验目的

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

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

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

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

二、实验内容

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

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

三、设计与编码

#include

#include

#include

#include

usingnamespacestd;

constintMaxSize=27000;

intRandArray[MaxSize];

intFactSize;

time_tBefore,After;

time_tStart,End;

voidSetRand(intSize)

{

srand(time(0));

for(inti=1;i

RandArray[i]=rand();

}

voidShow(inta[])//输出

{

for(inti=1;i

cout<

}

 

voidInsertSort(inta[],intn)//直接插入排序

{

intj;

for(inti=2;i<=n;i++)

{

a[0]=a[i];

for(j=i-1;a[0]

a[j+1]=a[j];

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

}

}

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

{

intd;//增量

inti,j;

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

{

for(i=d+1;i

{

a[0]=a[i];

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

a[j+d]=a[j];

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

}

}

}

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

{

intexchange=n;

intbound;

while(exchange!

=0)

{

bound=exchange;

exchange=0;

for(inti=1;i

{

if(a[i]>a[i+1])

{

inttmp=a[i];

a[i]=a[i+1];

a[i+1]=tmp;

exchange=i;

}

}

}

}

//简单选择排序

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

{

inti=first,j=end;

while(i

{

while(i

j--;

if(i

{

inttmp=a[i];

a[i]=a[j];

a[j]=tmp;

i++;

}

while(i

i++;

if(i

{

inttmp=a[i];

a[i]=a[j];

a[j]=tmp;

j--;

}

}

returni;//返回轴值

}

voidQuickSort(inta[],intfirst,intend)//快速排序

{

if(first

{

intpivot=Partition(a,first,end);//分区和返回轴值

QuickSort(a,first,pivot-1);//左侧快速排序

QuickSort(a,pivot+1,end);//右侧快速排序

}

}

voidSimpleSelectSort(inta[],intn)//简单选择排序

{

for(inti=1;i

{

intindex=i;

for(intj=i+1;j<=n;j++)//在无序区中选择最小数

if(a[j]

index=j;

if(index!

=i)

{

inttmp=a[i];

a[i]=a[index];

a[index]=tmp;

}

}

}

//堆排序

voidSift(inta[],intk,intm)//筛选法调整堆

{

inti=k,j=2*k;//j指向左孩子

while(j<=m)

{

if(j

j++;

if(a[i]>a[j])

break;

else

{

inttmp=a[i];

a[i]=a[j];

a[j]=tmp;

i=j;

j=2*i;

}

}

}

voidHeapSort(inta[],intn)//堆排序

{

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

Sift(a,i,n);

for(inti=1;i

{

inttmp=a[1];

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

a[n-i+1]=tmp;

Sift(a,1,n-i);

}

}

//归并排序

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

{

inti=s,j=m+1,k=s;

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

{

if(a[i]<=a[j])//取两者较小赋值给a1[k+++];

tmp[k++]=a[i++];

else

{

tmp[k++]=a[j++];

}

if(i<=m)

{

while(i<=m)

tmp[k++]=a[i++];

}

else

{

while(j<=t)

tmp[k++]=a[j++];

}

}

}

voidMergePass(inta[],inttmp[],intn,inth)//一趟归并排序算法

{

inti=1;

while(i<=n-2*h+1)

{

Merge(a,tmp,i,i+h-1,i+2*h-1);

i+=2*h;

}

if(i

Merge(a,tmp,i,i+h-1,n);

else

{

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

tmp[k]=a[k];

}

}

 

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

{

inth=1;

while(h

{

MergePass(a,tmp,n,h);

h=2*h;

MergePass(tmp,a,n,h);

h=2*h;

}

}

voidmain()

{

Start=time(0);

while

(1)

{

cout<<"\t\t各种排序算法比较\n\n";

cout<<"1,设置随机数个数\n";

/

*cout<<"2,C++函数库函数sort()\n";*/

cout<<"2,直接插入排序\n";

cout<<"3,希尔排序\n";

cout<<"4,冒泡排序\n";

cout<<"5,快速排序\n";

cout<<"6,直接选择排序\n";

cout<<"7,堆排序\n";

cout<<"8,归并排序\n";

cout<<"e,退出\n";

charselect;

cin>>select;

switch(select)

{

case'1':

{

cout<<"请输入随机数个数:

\t";

cin>>FactSize;

SetRand(FactSize);

cout<<"随机数为:

\n";

Show(RandArray);

break;

}

case'2':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]>0;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

Before=clock();

InsertSort(TmpArray,FactSize);

After=clock();

cout<<"\n直接插入排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'3':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]!

=NULL;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

Before=clock();

ShellSort(TmpArray,FactSize);

After=clock();

cout<<"\n希尔排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'4':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]!

=NULL;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

Before=clock();

BubbleSort(TmpArray,FactSize);

After=clock();

cout<<"\n冒泡排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'5':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]!

=NULL;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

Before=clock();

QuickSort(TmpArray,1,FactSize);

After=clock();

cout<<"\n快速排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'6':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]!

=NULL;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

Before=clock();

SimpleSelectSort(TmpArray,FactSize);

After=clock();

cout<<"\n直接选择排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'7':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]!

=NULL;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

Before=clock();

HeapSort(TmpArray,FactSize);

After=clock();

cout<<"\n堆排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'8':

{

intTmpArray[MaxSize];

for(FactSize=1;RandArray[FactSize]!

=NULL;FactSize++)

TmpArray[FactSize]=RandArray[FactSize];

intAssist[MaxSize];

Before=clock();

MergeSort(TmpArray,Assist,FactSize);

After=clock();

cout<<"\n归并排序算法排序,所用时间

为:

\t"<

cout<<"\n是否要显示排序后的随机数?

YorN\t";

charY;

cin>>Y;

if(Y=='Y'||Y=='y')

Show(TmpArray);

break;

}

case'e':

{

End=time(0);

cout<<"\n程序运行时间:

\t"<<(int)difftime(End,Start)<<"秒\n";

exit

(1);

}

default:

{

cout<<"输入错误!

\n";

break;

}

}

}

}

实验结果

10000个数时

20000个数据时

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

当前位置:首页 > 幼儿教育 > 育儿知识

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

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