排序算法性能比较

各种排序方法的综合比较


结论:
  
排序方法 平均时间 最坏时间 辅助存储
  
简单排序 O(n2)  O(n2)  O(1)
  
快速排序 O(nlogn) O(n2)         O(logn)
  
堆排序 O(nlogn) O(nlogn) O(1)
  
归并排序 O(nlogn) O(nlogn) O(n)
  
基数排序 O(d(n+rd)) O(d(n+rd)) O(rd)
另外:直接插入排序、冒泡排序为简单排序,希尔排序(不稳定)

一、时间性能 

按平均的时间性能来分,有三类排序方法:
时间复杂度为O(nlogn)的方法有:快速排序、堆排序和归并排序,其中以快速排序为最

好;

时间复杂度为O(n2)的有:直接插入排序、起泡排序和简单选择排序,其中以直接插入为

最好,特别是对那些对关键字近似有序的记录序列尤为如此;

时间复杂度为O(n)的排序方法只有,基数排序。

当待排记录序列按关键字顺序有序时,直接插入排序和起泡排序能达到O(n)的时间复杂

;而对于快速排序而言,这是最不好的情况,此时的时间性能蜕化为O(n2),因此是应

该尽量避免的情况。
简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键字的分布而改变。
二、空间性能

指的是排序过程中所需的辅助空间大小。

1. 所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O

(1)

2. 快速排序为O(logn  ),为栈所需的辅助空间;

3. 归并排序所需辅助空间最多,其空间复杂度为O(n );

4.链式基数排序需附设队列首尾指针,则空间复杂度为O(rd  )

三、排序方法的稳定性能

1. 稳定的排序方法指的是,对于两个关键字相等的记录,它们在序列中的相对位置,在

排序之前和经过排序之后,没有改变。

2. 当对多关键字的记录序列进行LSD方法排序时,必须采用稳定的排序方法。

3. 对于不稳定的排序方法,只要能举出一个实例说明即可。

4. 快速排序和堆排序是不稳定的排序方法


-------------------------------------------------------------------------------------------------------------------------

 

二、插入排序

1、直接插入排序

基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。排序过程:

38

49

65

97

76

13

27

49

...

 

 

38

49

65

76

97

13

27

49

...

 

 

13

38

49

65

76

97

27

49

...

 

 

13

27

38

49

65

76

97

49

...

 

 

13

27

38

49

49

65

76

97

...

 

2、折半插入排序

在直接插入排序中,为了找到插入位置,采用了顺序查找的方法。为了提高查找速度,可以采用折半查找,这种排序称折半插入排序。

32-路插入排序

为减少排序过程中移动记录的次数,在折半插入排序的基础上加以改进:

49

38

65

97

78

13

27

49

...

 

 

i=1

49

 

 

 

 

 

 

 

 

first

 

 

 

 

 

 

 

i=2

49

 

 

 

 

 

 

38

 

final

 

 

 

 

 

 

first

i=3

49

65

 

 

 

 

 

38

 

 

final

 

 

 

 

 

first

i=4

49

65

97

 

 

 

 

38

 

 

 

final

 

 

 

 

first

i=5

49

65

76

97

 

 

 

38

 

 

 

 

final

 

 

 

first

i=6

49

65

76

97

 

 

13

38

 

 

 

 

final

 

 

first

 

i=7

49

65

76

97

 

13

27

38

 

 

 

 

final

 

first

 

 

i=8

49

49

65

76

97

13

27

38

 

 

 

 

 

final

first

 

 

三、快速排序

1、起泡排序

首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。直至第n-1个记录和第n个记录的关键字进行过比较为止。

然后进行第二趟起泡排序,对前n-1个记录进行同样操作。

...直到在某趟排序过程中没有进行过交换记录的操作为止。

49

38

38

38

38

13

13

38

49

49

49

13

27

27

65

65

65

13

27

38

38

97

76

13

27

49

49

 

76

13

27

49

49

 

 

13

27

49

65

 

 

 

27

49

78

 

 

 

 

49

97

 

 

 

 

 

初始

第一趟

第二趟

第三趟

第四趟

第五趟

第六趟

2、快速排序

通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

初始关键字

49

38

65

97

76

13

27

49

 

i

 

 

 

 

 

j

j

1次交换之后

27

38

65

97

76

13

 

49

 

i

 

i

 

 

 

j

 

2次交换之后

27

38

 

97

76

13

65

49

 

 

 

i

 

 

j

j

 

3次交换之后

27

38

13

97

76

 

65

49

 

 

 

i

i

 

j

 

 

4次交换之后

27

38

13

 

76

97

65

49

 

 

 

 

ij

 

j

 

 

完成一趟排序

27

38

13

49

76

97

65

49

 

 

 

 

 

 

 

 

 

初始状态

49

38

65

97

76

13

27

49

一次划分

27

38

13

49

76

97

65

49

分别进行

13

27

38

 

 

 

 

 

 

结束

 

结束

 

49

65

76

97

 

 

 

 

 

49

65

 

结束

 

 

 

 

 

 

结束

 

 

有序序列

13

27

38

49

49

65

76

97

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值