排序算法的时间性能比较教学文稿Word文件下载.docx
- 文档编号:13394344
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:8
- 大小:75.62KB
排序算法的时间性能比较教学文稿Word文件下载.docx
《排序算法的时间性能比较教学文稿Word文件下载.docx》由会员分享,可在线阅读,更多相关《排序算法的时间性能比较教学文稿Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
树中任一非子叶节点的关键字均大于等于其子孩子结点的关键字,它只要记录一个大小的辅助空间,每个待排序的记录只占有一个存储空间,一般记录数较小的。
但对基数较大的文件还是很有效的,因为运行时间主要是小号在建初始堆和调整建新堆时进行的反复的筛选上的。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 算法 时间 性能 比较 教学 文稿