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

上传人:b****9 文档编号:26220686 上传时间:2023-06-17 格式:DOCX 页数:20 大小:135.15KB
下载 相关 举报
各种排序算法时间性能的比较.docx_第1页
第1页 / 共20页
各种排序算法时间性能的比较.docx_第2页
第2页 / 共20页
各种排序算法时间性能的比较.docx_第3页
第3页 / 共20页
各种排序算法时间性能的比较.docx_第4页
第4页 / 共20页
各种排序算法时间性能的比较.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

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

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

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

各种排序算法时间性能的比较

实训报告

实训题目:

各种排序算法时间性能的比较

学院:

计算机科学与技术学院

专业:

软件工程

班级:

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

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

^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;

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

当前位置:首页 > 经管营销 > 财务管理

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

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