自己动手实现了几个经典排序算法,有兴趣的朋友可以看一下
python吧
全部回复
仅看楼主
level 11
a65123731 楼主
都挺基础的...
2018年04月18日 07点04分 1
level 11
a65123731 楼主
1. 冒泡排序
2018年04月18日 07点04分 2
level 11
a65123731 楼主
我的缩进呢...
2018年04月18日 07点04分 4
level 11
a65123731 楼主
ok
这应该是最基础的排序算法了
时间复杂度O(n^2),但逻辑简单
2018年04月18日 07点04分 6
for 后面跟下划线可以吗[托腮]
2018年04月20日 02点04分
@asd7474166 可以,代表你不用这个变量,只需要循环
2018年04月20日 17点04分
@asd7474166 一开始我写的是i,然后pycharm给我标灰了[笑眼]
2018年04月20日 17点04分
学习了学习了,还有这功能
2018年04月22日 13点04分
level 11
a65123731 楼主
2.插入排序
2018年04月18日 07点04分 7
level 11
a65123731 楼主
3.选择排序
这几个都没啥说的
2018年04月18日 07点04分 8
level 11
a65123731 楼主
4.快速排序
这个就有点意思了
实现原理是从数组中随机抽取一个数,然后把所有比这个数小的放入一个新数组,比这个数大的放入另一个新数组,再对这两个新数组进行快速排序,直到所有数组都只剩下唯一一个元素(我把与这个数相等的也放在了一个新数组中,不过没有影响)
最坏时间复杂度还是O(n^2),不过正常情况下都是O(n logn)
2018年04月18日 07点04分 9
快速排序是真的快,但是空间复杂度太大了。。。
2020年02月24日 04点02分
@饼蛙✨ 有不需要额外空间的实现方法吧
2020年02月24日 22点02分
@a65123731 话说随机取数和固定取首位比,哪个会好一点?
2020年02月25日 00点02分
@饼蛙✨ 看原数据吧,如果原数据就是差不多排好序的,取首位就不太行了
2020年02月25日 10点02分
level 11
a65123731 楼主
排序1万个随机数的实际运行时间
2018年04月18日 07点04分 10
level 11
a65123731 楼主
5.归并排序
这也是一种非常常见的排序算法,甚至python内建list.sort()用的算法也是由这种算法发展而来
一般情况下比快速排序慢2-3倍,但优点是稳定,最好最坏情况下的时间复杂度都是O(n logn)
2018年04月18日 07点04分 11
level 11
a65123731 楼主
ok,今天收工,明天来看看有人看没,有的话继续更新堆排序、桶排序和基数排序
2018年04月18日 07点04分 12
level 2

2018年04月19日 16点04分 13
level 8
谢谢分享!!!
2018年04月21日 02点04分 14
level 11
a65123731 楼主
补充:希尔排序
2018年04月21日 07点04分 15
level 11
a65123731 楼主
6.堆排序
2018年04月21日 07点04分 16
level 11
a65123731 楼主
这里需要先了解一种数据结构:堆(heap) 一般有最大堆(大顶堆)和最小堆(小顶堆),因为我这个排序是要从小到大,所以用了最小堆。
最小堆实际上就是一颗遵守 “子节点一定不小于父节点” 的完全二叉树
先给出最小堆的代码
2018年04月21日 07点04分 17
1 2 尾页