排序算法小结

最近在看算法,为实习面试做准备,今天刚看完排序这部分,简要做个总结:

目前常用的排序算法有:1.选择排序、2.插入排序、3.快速排序、4.归并排序、5.堆排序。

对一个无序的大小为N的数组来说,选择排序就是做N次循序,每次循环找到剩余数组中的最小值,然后与数组前端的值交换,时间复杂度是o(N2),我觉得这个方法和冒泡法挺像的,不同的是,冒泡法是相邻的两个元素之间做比较,然后将较小的元素置前,而选择排序是将当前值与最小值比较,最后在将最小值置前,时间复杂度一致,不过选择排序数据交换的次数要少些。

插入排序可以通过这样一个场景去理解:当你在斗地主时,每次摸一张牌,都需要在你的手牌中按大小顺序插入,也就是说每次插入一个元素,都要跟前面的i-1个元素相比较,将前面的元素大于当前元素进行替换,这样的话就可以保证当前数组元素都是有序的,这个方法的时间复杂度也是o(N2),不过平均效率要比选择排序快两倍左右,因为,选择排序比较死板,永远都要比较N2/2次,而插入排序不一样,当数组部分有序时,可以减少比较的次数。

快速排序是书中比较推荐的一种排序方法,快速排序是将首元素当做分片元素,将整个数组分为两块,左边的元素均小于分片元素,右边的元素均大于分别元素,相当于将原数组划分为了两个子数组,这种分而治之的思想在算法中是常见且有效的;这样不停的划分,最后的结果就是每个子数组都为单个元素,然后在进行子数组合并,最后就得到了有序的数组了,这个算法的问题在与数组元素的随机性,如果完全是顺序的或者逆序的,会造成性能的下降,平均时间负责度将从o(NlogN)下降到o(N2)。

归并排序的思想是将两个有序的子数组进行合并,也是利用的分而治之的思想,不过它的空间复杂度要比快速排序高,归并的空间复杂度是o(N),而快速排序的空间复杂度是o(logN).

堆排序其实挺好用的,利用了二叉树的数据结构,父元素要大于子元素,然后通过上浮和下沉操作对插入的新元素或者删除最大元素后的排序进行重整,元素利用数组进行存储,时间复杂度为o(NlogN),空间复杂度为常数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值