前段时间陆续看了各种排序算法和查找算法,觉得不过瘾,很多东西不系统,所以网上找了一本书程杰的《大话数据结构》。这段时间认真学习了全本内容,收获颇多,想着就总结一下这段时间所学,所思,权当给大家一个借鉴吧。
先从排序算法说起
现在流行的排序算法如果按类型分大致分为五大类:选择排序类、插入排序类、交换排序类、归并排序类和计数排序类,各有优劣,每种算法的运用常见不一样,但总体来说,交换排序类中的快速排序表现最优,所以使用得相对较多,各种语言都有对应的实现。
如果按复杂程度分,又分为简单排序算法和高级排序算法。其中冒泡排序、简单选择排序、直接插入排序属于简单排序算法。归并排序、快速排序、希尔排序、计数排序、堆排序等属于高级排序算法。
如果按照是否比较分类,那么可以分为比较类排序和非比较类排序,其中非比较类排序为计数排序其他均为比较类排序。
当然我这里罗列的并不全,我学习并理解的也不止这些,不过相对来说这几种排序算法比较容易实现和理解,所以就选择这几种来分享,如果感兴趣的童鞋可以自行搜索学习~。
之后是查找算法
查找有顺序查找、二分查找、二叉查找、多路查找和哈希查找。其中二分查找和二叉查找是我要介绍的重点,他们都有优化方式的实现。二分查找是一个非常优秀的查找,不过缺陷比较明显是数据必须有序。二分查找要将数据排成一个二叉树结构,相当于也是序列化了一次。多路查找和二分查找一个道理。只有顺序查找没有限制,但是查找效率又太低。
之后是数据结构
数据结构中主要分为堆、栈、串、树、图。其中堆栈串都是我们很熟悉的结构,我会简单带过。树结构用得最多最广,也最有效,所以重点分享树结构,图结构比较复杂,并且用得不多,所以也不深入讲解。
以上就是我后续文章将要分享的全部内容,同时我的github上有全套的源码和对应的单元测试,有兴趣的童鞋可以去看下。
github地址:https://github.com/maoruibin001/algorithm。
PS:本次分享默认以javascript实现,如果想看python实现的可以去我的github上,我会上传python对应的代码,如果想看c语言的实现的,麻烦在留言区留言,如果有人想看,我再写一份。