文章目录

八中排序方式的对比

数据生成

我采用随机函数来生成随机数据,将生成的数据保存在.txt文件里

生成的数据大小范围在排序总结——————数据结构_运行时间内,生成的数据完全是随机的

其中 排序总结——————数据结构_运行时间_02

采用当前时间来作为随机数种子

srand(time(NULL));//随机数种子

生成的数据将保存在文件名为以下的文件里

排序总结——————数据结构_排序算法_03

排序总结——————数据结构_数据_04

排序总结——————数据结构_数据_05

排序总结——————数据结构_运行时间_06

代码如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("1e6.txt","w",stdout);//输出到文件
int n = 1e6;//数据量的大小
srand(time(NULL));//随机数种子
for(int i=0;i<n;i++)
printf("%d ",(abs(rand())+n)%n);
return 0;
}

排序算法

将会进行以下几种排序算法比较,

分别比较它们的

  • 运行时间:(ms)
  • 交换次数:
  • 移动次数:

八中排序算法:

  1. 插入排序排序总结——————数据结构_排序算法_07
  2. 折半插入排序排序总结——————数据结构_运行时间_08
  3. 希尔排序排序总结——————数据结构_排序算法_09
  4. 冒泡排序排序总结——————数据结构_排序算法_10
  5. 简单选择排序排序总结——————数据结构_数据_11
  6. 快速排序排序总结——————数据结构_数据_12
  7. 堆排序排序总结——————数据结构_数据_13
  8. 归并排序排序总结——————数据结构_排序算法_14

性能比较

排序总结——————数据结构_数据_15

这些排序算法的性能比较如上图所示,我们通过时间复杂度可以看出,排序总结——————数据结构_运行时间_16的算法肯定是最慢的,而堆排序,快速排序,归并排序的平均时间复杂度是排序总结——————数据结构_排序算法_17,显然比其他算法快一些。

我们用这些算法对相同的随机数据进行排序,观察一下它们的运行时间,移动次数,交换次数,来进行更加直观的分析。

运行时间比较(ms)

排序算法 数据大小

1e3

1e4

1e5

1e6

InsertSort

1

87

7809

889262

BInsertSort

1

75

6828

838490

ShellSort

0

1

37

413

BubbleSort

3

1

39693

3890712

QuickSort

0

1

15

151

SelectSort

1

120

11775

1131986

HeapSort

0

2

21

564

MergeSort

0

1

23

184

排序总结——————数据结构_排序算法_18


我们观察运行时间(单位ms),数据是1e3的时候看不出来大的差别,但是当数据逐渐增多,不同的算法排序所用的时间差别也越来越大!

在数据为1e6的时候,快速排序将1e6的数据排完序仅用了0.1s,而冒泡排序将这些数据排序成功需要花费一个多小时,现在我们做的才仅仅是百万级别的数据,和普通的算法相比,优秀的算法要比它快三万倍。

在这个大数据的时代,算法的重要性不言而喻。

移动次数比较

排序算法 数据大小

1e3

1e4

1e5

1e6

InsertSort

251935

24834732

2498350057

249759429861

BInsertSort

251944

24834740

2498350073

249759429905

ShellSort

11041

204402

3532741

52682333

BubbleSort

250945

24824741

2498250074

249758429906

QuickSort

4770

61112

763306

8243154

SelectSort

995

9990

99988

999957

HeapSort

10553

139191

1725178

20549336

MergeSort

19952

267232

3337856

39902848

排序总结——————数据结构_排序算法_19

交换次数比较

排序算法 数据大小

1e3

1e4

1e5

1e6

InsertSort

990

9991

99983

999955

BInsertSort

999

9999

99999

999999

ShellSort

3834

57433

763790

8369173

BubbleSort

250945

24824741

2498250074

249758429906

QuickSort

697

6929

74695

867486

SelectSort

995

9990

99988

999957

HeapSort

10553

139191

1725178

20549336

MergeSort

250945

24824741

2498250074

249758429906

排序总结——————数据结构_运行时间_20


本文仅代表个人观点。