排序算法的时间性能比较.docx

上传人:b****2 文档编号:1817723 上传时间:2022-10-24 格式:DOCX 页数:8 大小:122.61KB
下载 相关 举报
排序算法的时间性能比较.docx_第1页
第1页 / 共8页
排序算法的时间性能比较.docx_第2页
第2页 / 共8页
排序算法的时间性能比较.docx_第3页
第3页 / 共8页
排序算法的时间性能比较.docx_第4页
第4页 / 共8页
排序算法的时间性能比较.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

排序算法的时间性能比较.docx

《排序算法的时间性能比较.docx》由会员分享,可在线阅读,更多相关《排序算法的时间性能比较.docx(8页珍藏版)》请在冰豆网上搜索。

排序算法的时间性能比较.docx

排序算法的时间性能比较

排序算法的时间性能比较

排序算法的时间性能比较

一、问题描述

给出一组实验来比较下列排序算法的时间性能:

快速排序、堆排序、冒泡排序

二、基本要求

(1)时间性能包括平均时间性能、最好情况下的时间性能、最差情况下的时间性能等。

(2)实验数据应具有说服力,包括:

规模范围要大(如从100到10000),数据的初始特性类型要多,因而需要具有随机性;实验数据的组数要多,即同一规模的数组要多选几种不同类型的数据来实验。

实验结果要能以清晰的形式给出,如图、表等。

(3)算法所用时间必须是机器时间,也可以包括比较和交换元素的次数。

(4)实验分析及其结果要能以清晰的方式来描述,如数学公式或图表等。

(5)要给出实验的方案及其分析。

三、工具/准备工作

MicrosoftVisualC++6.0软件。

四、分析与实现

1.快速选择排序

这个是冒泡排序的一种改进,他的基本思想就是在当前无序区R【1….H】中任取一个数据元素的基准用此基准将当前无序区划分成左右二个较小的无序去区,R【1……i-1】和R【i+1…..H】,且左边的元素序子区中的数据元素均小于等于基数元素,右边的元素序子区中的数据元素均大于等于基数元素。

直到所有无序子区中的数据元素

SLCellrl[MAX_SPACE];

intKeynum;

intrecnum;}

SLList;

typedefintArrType[RADIX];

intcompare[8];

intchange[8];

voidshuRu(SqlistL){

inti=1,n;

printf("请输入你输入的数据个数:

\n");

scanf("%d",&n);

printf("请依次的输入各个数据值\n");

L.length=n;

for(;i<=L.length;i++)

{scanf("%d",&L.r[i]);

}}

voidshuChu(SqlistL){

inti=1;

printf("该顺序存储中的数据元素为:

");

for(;i

{printf("%d",L.r[i]);}

printf("%d\n\n",L.r[i]);

}

//=======快速排序=========

intpartition(SqlistL,intlow,inthigh)

{KeyTypepivotKey;

L.r[0]=L.r[low];

pivotKey=L.r[low].Key;

change[4]++;

while(low

compare[4]++;

compare[4]++;

while(low=pivotKey)

{--high;compare[4]++;}

L.r[low]=L.r[high];

change[4]++;

compare[4]++;

while(low

{++low;compare[4]++;}

L.r[high]=L.r[low];change[4]++;}

L.r[low]=L.r[0];

change[4]++;

returnlow;}

voidQsort(SqlistL,intlow,inthigh)

{intpivotloc;

if(low

{pivotloc=partition(L,low,high);

Qsort(L,low,pivotloc-1);

Qsort(L,pivotloc+1,high);}}

voidQuickSort(SqlistL)

{Qsort(L,1,L.length);}

//=========堆排序========

voidHeadAdjust(HeadTypeH,ints,intm){

RedTyperc;

intj;

rc=H.r[s];

for(j=2*s;j<=m;j*=2)

{compare[5]++;

if(j

if(rc.Key>H.r[j].Key)

{compare[5]++;break;}

H.r[s]=H.r[j];s=j;

change[5]++;}

H.r[s]=rc;

change[5]++;}

voidHeadSort(HeadTypeH)

{RedTypetemp;

for(inti=H.length/2;i>0;--i){

compare[5]++;

HeadAdjust(H,i,H.length);}

for(i=H.length;i>1;i--)

{compare[5]++;

temp=H.r[1];H.r[1]=h.r[i];h.r[i]=temp;

change[5]+=3

HeadAjust(H,1,i-1);}}

//=====冒泡法排序=====

voidbubbleSort(Sqlist&L)

{inti,j,temp;

for(i=1,i<=L.length;i++)

{compare[2]++;

compare[2]++;

if(L.r[j].Key>L.[j+1].Key0;

L.r[j=1].Key=temp;

charge[2]+=3}}}}

printf("\t请选择你要进行的操作\t\n");

printf("\tcase1:

产生完全随机的数据再进行排序\t\n");

printf("\tcase2:

自行输入一些数据再实现排序操作\t\n");

printf("\tcase0:

退出程序\t\n");

voidTable{

printf("t=算法名称=====比较次数====交换次数======

printf("\t1快速排序t%d\t%d\t\n",COMPARE[H]change[5]);

printf("t=算法名称=====比较次数====交换次数======

printf("\t1堆排序t%d\t%d\t\n",COMPARE[H]change[3]);

printf("t=算法名称=====比较次数====交换次数======

printf("\t1冒泡排序t%d\t%d\t\n",COMPARE[H]change[0);

voidRandom(sqlist&L)

{SLListLK;

for(inti=0;i<8;i++)

{compare[i]=0

change[i]=0

printf("请输入你产生的随机数的数据个数:

”)

printf("排序之前的随机数的%d个数是:

\n',L.length);

for(i=1;i<=L.length:

i++)

printf("%d",L.r[i].key);

printf("\n下面执行的各个排序的运行情况、你“);

voidmian()

{

intchoose;

Men();

printf("\t请选择:

”);

scanf(choose)

{

case1:

Random(L);break:

case2:

Yonghu(L);break:

case3:

Nixh(L);break:

case0;

return;

}}}

五、测试与结论

输入数据得出结果如下:

1当要求随机生成十二个数的结果如下:

2.但随机生成34个数的结果如下:

结论:

从数据结果我们可以看出,当排序的数据个数少的时候,快速排序是最快的,而大的数据时,堆排序是比较好的选择。

每一个排序都有它自己的特点。

六、课程设计总结

对于这次课程设计,我收获颇多,但发现自己有许多的不足,特别是代码的编写上,几乎参照了网上的资料,但从别人的程序中我学习到了很多在课堂上学不到的知识,这次的课程设计让我懂得了,只有努力学习,才的解决问题。

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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