排序

堆排序,归并排序,快速排序

参考:http://www.cnblogs.com/xiaochun126/p/5086037.html

各种常用排序算法

类别

排序方法

时间复杂度

空间复杂度

稳定性

复杂性

特点

最好

平均

最坏

辅助存储

简单

插入

排序

直接插入

O(N)

O(N2)

O(N2)

O(1)

稳定

简单

希尔排序

O(N)

O(N1.3)

O(N2)

O(1)

不稳定

复杂

选择

排序

直接选择

O(N)

O(N2)

O(N2)

O(1)

不稳定

堆排序

O(N*log2N)

O(N*log2N)

O(N*log2N)

O(1)

不稳定

复杂

交换

排序

冒泡排序

O(N)

O(N2)

O(N2)

O(1)

稳定

简单

1、冒泡排序是一种用时间换空间的排序方法,n小时好
2、最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(N^2)只是表示其操作次数的数量级
3、最好的情况是数据本来就有序,复杂度为O(n)

快速排序

O(N*log2N)

O(N*log2N)

O(N2)

O(log2n)~O(n)

不稳定

复杂

1、n大时好,快速排序比较占用内存,内存随n的增大而增大,但却是效率高不稳定的排序算法。
2、划分之后一边是一个,一边是n-1个,
这种极端情况的时间复杂度就是O(N^2)
3、最好的情况是每次都能均匀的划分序列,O(N*log2N)

归并排序

O(N*log2N)

O(N*log2N)

O(N*log2N)

O(n)

稳定

复杂

1、n大时好,归并比较占用内存,内存随n的增大而增大,但却是效率高且稳定的排序算法。

基数排序

O(d(r+n))

O(d(r+n))

O(d(r+n))

O(rd+n)

稳定

复杂

注:r代表关键字基数,d代表长度,n代表关键字个数

大家可以看到,堆排序的时间复杂度是很稳定的,而快排的时间复杂度最坏情况下会到n^2,那么为什么不都用堆排序呢?

首先,时间复杂度这个概念只是一个粗略的估计概念,在真实情况下, 一般快排的效率比堆排序高很多。

快排:数组中交换数据,在数据量不是特别大,而且离散程度较高的情况下效率很高

堆排序:创建堆,数据交换,调整堆的时间均很多

所以在实际应用中,我们用快排会更多一点。

堆排序的典型应用:在100万个数字中找出最大的100个这种问题,构建一个小顶堆然后遍历调整就可以了

为什么是小顶堆:小顶堆,最小的数就在最上面,只要与最上面的数进行比较就可以了,所以是小顶



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值