排序算法学习笔记

排序算法学习笔记

最近打算将基础知识巩固一下,从基础的排序算法开始,网上很多排序算法的资料,我就不拿过来抄了,主要是说一下自己遇到的一些体会。

学习算法的时候,开始只是看一些炫酷的可视化排序图,但这个并不能帮助你的理解,因为没有细节,要想真正去理解算法,需要自己动手去写一个算法实践。

算法分为2部分:算法设计,算法实现。对于算法设计,就是搞清楚算法的思想,例如希尔排序,有分组和增量的概念,需要自己能够根据这个概念指导怎么将一个无序列的数排成有序,必须知道每个细节。对于算法实现,只不过是将算法设计去实现而已,如果在算法设计那个环节就没有做好,那么在算法实现环节肯定会花很多功夫。这个我就吃在调试快排的时候就吃了亏,在对快排还是很模糊的理解下就开始写代码,结果写的乱七八糟,花了整整一天时间在调试bug。

算法稳定性方面,以前没有概念,现在知道是在多个字段排序上有用。对于相同的值,在排序的时候不会调换顺序,就认为该算法是稳定的。

快排: 左右两个哨兵,分别从两边向中间出发,然后在遇到比基数大(小)的时候,交换位置。直到相等,左右重新设置基数,递归。
冒泡: 一直与相邻的做交换,直到最大的被换到最后。
选择: 类似于冒泡,但交换的次数比较少。
插入: 类似于打扑克抓拍,抓到一张就在手上有顺序的牌中插入。
希尔: 在插入排序上做的改进,与较远的元素交换,分组。
归并: 从中间将序列分成两半,递归,最后将左右的两个有序序列合并。
堆排序: 通过完全二叉树来构建排序。

学习建议方面,一定要去自己做一遍,看了别人写的再简单,也比不上自己做一遍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值