各种排序算法时间性能的比较.docx
- 文档编号:26220686
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:20
- 大小:135.15KB
各种排序算法时间性能的比较.docx
《各种排序算法时间性能的比较.docx》由会员分享,可在线阅读,更多相关《各种排序算法时间性能的比较.docx(20页珍藏版)》请在冰豆网上搜索。
各种排序算法时间性能的比较
实训报告
实训题目:
各种排序算法时间性能的比较
学院:
计算机科学与技术学院
专业:
软件工程
班级:
142
学号:
1400170269
学生姓名:
莫磊
指导教师:
蔡丽
2016年3月15日
、实训目的及要求
数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:
其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。
本综合实训利用VisualStudio2008集
成编程环境为实践工具,通过上机实践培养学生分析具体问题、解决实际问题的能力,训练和培养学生的数据抽象能力和程序设计的能力。
数据结构是一门实践性较强的课程,以培养学生的数据抽象能力和程序设计的能力为目的。
在实训时应注重培养学生的实际操作能力。
本综合实训安排了18学时的实
验课时,具体要求如下:
1.学习和理解每个实训题目的基本理论和方法;
2.掌握每个实验的实现步骤和关键技术;
3.准备好实验所需要的资源和文档;
4.上机实现程序,得到通过调试的正确程序。
5.根据每个实验的不同要求,完成实验报告的word文档。
二、实训环境
WindowsXP
VisualStudio2013
三、实训内容
(1)设计并实现上述各种排序算法;
(2)产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性
能;
(3)产生随机的初始排列分别调用上述排序算法,并比较时间性能。
(4)对各种排序方法(直接插入排序、希尔排序、起泡排序、直接选择排序)的时间性能进行比较。
四、算法描述及实训步骤
上述各种排序方法都是基于比较的内排序,其时间主要消耗在排序过程中进行的记录的比较次数和移动次数,因此,统计在相同数据状态下不同排序算法的比较次数和移动次数,即可实现比较各种排序算法的目的。
五、总结及心得体会
直接选择排序算法是对冒泡排序的改进,这种方法是在参加排序数组中找出最小(或最大)的数据元素,使它与第一个元素中的数据相互交换位置然后再在余下的元素中找出最小(或最大)的数据元素与第二个元素中的元素交换位置,以此类推直到所有元素成为有序序列。
六、实训结果
;输出冒泡正序排序后数据如下
0
1
2
3
4
5
5
6
6
8
11
11
12
16
16
18
18
21
22
23
23
23
24
26
26
27
27
29
29
29
29
31
33
34
35
35
36
37
37
38
3S
39
40
40
41
41
41
41
42
42
42
44
44
生5
46
47
47
48
48
50
53
53
54
56
57
58
59
61
62
^2
64
64
64
&6
67
67
68
69
69
70
71
73
76
78
78
81
82
S2
84
83
90
90
91
92
93
94
95
95
朋
比较的次数为
:
4797
移动的次数为:
⑹g
狗也曰很肚丿予徘丿予后软瑪刘,
99
95
94
93
92
91
91
90
90
80
84
S2
82
81
78
78
76
73
71
70
G9
£勺
68
67
67
6b
64
64
64
62
62
61
59
58
57
56
54
53
53
50
48
48
47
47
46
45
44
44
42
42
42
41
41
41
41
40
40
39
33
3S
37
37
36
35
35
34
33
31
29
29
29
29
27
27
26
26
24
23
23
23
22
21
18
18
16
16
12
11
11
8
6
6
5
5
1
3
2
1
0
比较的次数为
:
4947
移动的枕数为汐2朋
o
1
2
3
4
5
5
6
6B
11
11
12
16
16
13
12
21
22
23
23
23
24
26
26
27
27
29
29
29
29
3L
33
34
35
35
3h
37
37
38
3S
S9
40
40
41
41
41
41
42
42
42
44
44
4£
46
47
47
49
48
SO
53
sa
E4
S6
E7
S3
旳
61
62
62
£4
B4
64
&h
H7
G7
6H
K4
2
70
71
73
7t
7S
7S
呂1
22
S2
S4
S3
90
90
91
91
92
93
94
55
95
弓9
比较的次数芮
:
gg移动的次数渔
:
260Q
_枱dj古七基灯i£世riE-H卜rte占n"R-
稠出且搂曲人送厅羽F丿予后飲于刘h--
gq
gw
32
til
◎1
©D
ED
88
S4
32
82
31
73
78
7&
73
71
70
g
2
08
S7
e?
60
e4
G4
C4
62
62
61
59
S2
S7
S6
54
S3
53
50
48
48
47
47
46
45
44
41
42
42
42
41
41
41
41
40
40
39
22
38
37
37
36
35
35
34
33
31
29
29
29
曲
27
27
26
26
24
23
23
23
22
21
ie
18
16
16
12
11
11
s
6
E
5
4
3
2
1
0
比转的次敌対
:
99移功的次数沟
:
2297
:
输出肓接插.人庁序排序后故抵如下
输出宜按选扌牽止序排仔后数扌居如卜
Is
42
42
42
48
b
Q-
44
u-
3
G444n3427^-5443212
179a
445&
87517呂了13
5134456sQ
6651677S2
4123445679
664056681
31ni344-567_y
243044461
21ny-nd445679
131943430
11nioo345&79
45
411
.6
2
:
4950移动的次皴均:
问
输出直接选埠逆序排序后数堀如下
46
47
47
18
27
8
T-
■JD
4£
:
^950移动的次数为:
泪
42
2
Q-
8
O
O
2
8
139823410
f有排序的比较次数利移动次数如下’
503移动次敎为:
457503移动次数为:
457479?
移动次数为:
2旳94947移动次数为恣折99移祈次败%:
出0999移动次数为:
22974950移动次数为:
944950移动次数为:
97
七、源代码:
#include
#include
#inelude
//正序希尔排序
voidxiEr(intnum[],intn,int&no,int&r){
intitem;
inti,j,d;
for(d=n/2;d>=1;d=d/2){
for(i=d;i item=num[i]; j=i-d; while((j>=0)&&(item j=j-d; r=r+1; } num[j+d]=item; no=no+1; } } //printf("\n"); //for(intx=0;x //printf("%d\t",num[: x]); //} }//逆序希尔排序 voidxiErUp(intnum[],intn,int&no,int&r){ intitem; inti,j,d; for(d=n/2;d>=1;d=d/2){ for(i=d;i item=num[i]; j=i-d; while((j>=0)&&(item>num[j])){num[j+d]=num[j]; j=j-d; r=r+1; } num[j+d]=item; no=no+1; } } } //正序冒泡排序 voidMaoPao(intnum[],intn,int&no,int&r){ boolflag; inttest; for(inti=1;i flag=true; for(intj=n-1;j>=i;j--){ if(num[j] test=num[j]; num[j]=num[j-1]; num[j-1]=test; flag=false; 叶+; } no++; } if(flag){ return; } } } voidMaoPaoUp(intnum[],intn,int&no,int&r){boolflag; inttest; for(inti=1;i flag=true; for(intj=n-1;j>=i;j--){ if(num[j]>num[j-1]){test=num[j]; num[j]=num[j-1];num[j-1]=test;flag=false; 叶+; } no++; } if(flag){ return; } } }voidChaRu(intnum[],intn,int&no,int&r)〃{ //: 比较次数,r: 移动次数。 inti,j,x; for(i=1;i { no++; x=num[i]; j=i-1; while((j>=0)&&(xvnum[j])) { 叶+; num[j+1]=num[j]; j--; }//顺序比较和移动 num[j+1]=x; } }voidChaRuUp(intnum[],intn,int&no,int&r)〃{ //: 比较次数,r: 移动次数。 inti,j,x; for(i=1;i { no++; 直接插入排序 直接插入排序 x=num[i]; j=i-1; while((j>=0)&&(x>num[j])) 直接选择排序/: 比较次数,r: 移动次数 直接选择排序/: 比较次数,r: 移动次数 叶+; num[j+1]=num[j]; j--; }//顺序比较和移动 num[j+1]=x; } } voidXuanZe(intnum[],intn,int&no,int&r)〃 { intx;inti,j,k; for(i=1;i<=n-1;i++) { k=i-1; for(j=i;j<=n-1;j++) { no++;if(num[j] } if(k! =i-1) { 叶+; x=num[i-1]; num[i-1]=num[k]; num[k]=x; } } } voidXuanZeUp(intnum[],intn,int&no,int&r)//{ intx;inti,j,k; for(i=1;i<=n-1;i++) { k=i-1; for(j=i;j<=n-1;j++) { no++;if(num[j]>num[k])k=j; } if(k! =i-1) { 叶+; x=num[i-1]; num[i-1]=num[k]; num[k]=x; voidShuChu(intnum[],intn,intno,intr,charname[]){ printf("===============输岀%甜卡序后数据如下==============\n\n",name); for(intx=0;x printf("%d\t",num[x]); } printf("\n比较的次数为: %d\t移动的次数为: %d",no,r); printf("\n===========================================================\n\n“);} intmain(){ intnum[100]; intn=100; intno1,no2,no3,no4; intr1,r2,r3,r4; intno11,no22,no33,no44; intr11,r22,r33,r44; r4=r3=r2=r1=0; no44=no33=no22=no11=0; r44=r33=r22=r11=0; printf(”============初始的随机数据如下==========='n\n");for(inti=0;i num[i]=rand()%100; printf("%d\t",num[i]); for(intx=0;x item1[x]=num[x]; item2[x]=num[x]; item3[x]=num[x]; item4[x]=num[x]; item22[x]=num[x]; item33[x]=num[x]; item44[x]=num[x]; } xiEr(num,n,no1,r1); ShuChu(num,n,no1,r1,name1); xiEr(item1,n,no11,r11); ShuChu(item1,n,no11,r11,name11); MaoPao(item2,n,no2,r2); ShuChu(item2,n,no2,r2,name2); MaoPaoUp(item22,n,no22,r22); ShuChu(item22,n,no22,r22,name22); ChaRu(item3,n,no3,r3); ShuChu(item3,n,no3,r3,name3); ChaRuUp(item33,n,no33,r33); ShuChu(item33,n,no33,r33,name33); XuanZe(item4,n,no4,r4); ShuChu(item4,n,no4,r4,name4); XuanZeUp(item44,n,no44,r44); ShuChu(item44,n,no44,r44,name44); printf("===========================================================\n"); printf("===========================================================\n"); printf("所有排序的比较次数和移动次数如下: \n\n"); printf("%s: \t比较次数为: %d移动次数为: %d\n",name1,no1,r1); printf("%s: \t比较次数为: %d移动次数为: %d\n",name1,no11,r11); printf("%s: \t比较次数为: %d移动次数为: %d\n",name2,no2,r2); printf("%s: \t比较次数为: %d移动次数为: %d\n",name22,no22,r22); printf("%s: \t比较次数为: %d移动次数为: %d\n",name3,no3,r3); printf("%s: \t比较次数为: %d移动次数为: %d\n",name33,no33,r33); printf("%s: \t比较次数为: %d移动次数为: %d\n",name4,no4,r4); printf("%s: \t比较次数为: %d移动次数为: %d\n",name44,no44,r44); printf("\n===========================================================\n");getchar(); return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 各种 排序 算法 时间 性能 比较