排序算法的时间性能比较教学文稿Word文件下载.docx

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

排序算法的时间性能比较教学文稿Word文件下载.docx

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

排序算法的时间性能比较教学文稿Word文件下载.docx

树中任一非子叶节点的关键字均大于等于其子孩子结点的关键字,它只要记录一个大小的辅助空间,每个待排序的记录只占有一个存储空间,一般记录数较小的。

但对基数较大的文件还是很有效的,因为运行时间主要是小号在建初始堆和调整建新堆时进行的反复的筛选上的。

3.冒泡排序

这种排序的比较基本思想就是二二比较待排序的数据元素的大小,发现二个数据元素的次序相反时候,就进行交换,知道没有反序的数据为止。

冒泡排序是一种一次比较出最小或最大值,然后将其放置序列的最后一位置,再将剩下的从打一个位置开始到N-1的位置进行重复的操作。

排序算法的时间空间复杂度

排序方法

最坏情况

平均情况

最好情况

快速排序

O(nlogn)

O(n2)

O

(1)

堆排序

O(n)

冒泡排序

程序代码:

#include<

stdio.h>

stdlib.h>

math.h>

#defineMAXSIZE50

typedefintKeyType;

#defineMAXNUM100

typedefstruct{

KeyTypeKey;

}RedType;

RedTypeR[MAXNUM];

RedTyper[MAXSIZE+1];

intlength;

}

Sqlist;

SqlistL,L0,L1,L2,L3,L4,L5,L6,L7;

typedefSqlistHeadType;

#defineRADIX10

#defineMAX8

#defineMAX_SPACE10000

typedefintKeysType;

typedefstruct

{KeysTypeKeys[MAX];

intnext;

SLCell;

typedefstruct{

SLCellrl[MAX_SPACE];

intKeynum;

intrecnum;

SLList;

typedefintArrType[RADIX];

intcompare[8];

intchange[8];

voidshuRu(SqlistL){

inti=1,n;

printf("

请输入你输入的数据个数:

\n"

);

scanf("

%d"

&

n);

请依次的输入各个数据值\n"

L.length=n;

for(;

i<

=L.length;

i++)

{scanf("

L.r[i]);

}}

voidshuChu(SqlistL){

inti=1;

printf("

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

"

L.length;

{printf("

L.r[i]);

%d\n\n"

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

intpartition(SqlistL,intlow,inthigh)

{KeyTypepivotKey;

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

pivotKey=L.r[low].Key;

change[4]++;

while(low<

high){

compare[4]++;

while(low<

high&

&

L.r[high].Key>

=pivotKey)

{--high;

compare[4]++;

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

change[4]++;

L.r[low].Key<

{++low;

compare[4]++;

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

change[4]++;

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

returnlow;

voidQsort(SqlistL,intlow,inthigh)

{intpivotloc;

if(low<

high)

{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<

m&

(compare[5]++)&

(H.r[j].Key<

H.r[j+1].Key))++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;

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<

{compare[2]++;

compare[2]++;

if(L.r[j].Key>

L.[j+1].Key0;

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

charge[2]+=3}}}}

\t请选择你要进行的操作\t\n"

\tcase1:

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

\tcase2:

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

\tcase0:

退出程序\t\n"

voidTable{

printf("

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

\t1快速排序t%d\t%d\t\n"

COMPARE[H]change[5]);

\t1堆排序t%d\t%d\t\n"

COMPARE[H]change[3]);

\t1冒泡排序t%d\t%d\t\n"

COMPARE[H]change[0);

voidRandom(sqlist&

{SLListLK;

for(inti=0;

8;

{compare[i]=0

change[i]=0

printf("

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

”)

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

\n'

L.length);

for(i=1;

=L.length:

printf("

L.r[i].key);

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

voidmian()

{

intchoose;

Men();

printf("

\t请选择:

”);

scanf(choose)

{

case1:

Random(L);

break:

case2:

Yonghu(L);

case3:

Nixh(L);

case0;

return;

}}}

五、测试与结论

输入数据得出结果如下:

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

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

结论:

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

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

六、课程设计总结

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

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

当前位置:首页 > PPT模板 > 商务科技

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

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