ARTS (第4周)
开篇词
在这次看极客时间《数据结构与算法之美》专栏之前,我也曾使用过递归,但只是简单的单层的递归(简单的父子节点构成的数),关于递归,按照这篇专栏的介绍。
如何使用递归,应该有如下几个点:
1、中止条件,什么时候该结束递归。
2、递归如何进行拆分。
3、拆分后要做什么。
如果每次使用递归之前明确这几个点,其实会发现递归的使用很清晰明了。
出处:《数据结构与算法之美》(作者:王争)
https://time.geekbang.org/column/intro/126
本周:
递归、各类经典排序
Algorithm 算法
经典的排序算法
按照极客时间专栏里介绍的排序算法。
我写了5种,冒泡排序,插入排序,选择排序,归并排序,快速排序。
以下就是代码
冒泡排序
冒泡排序没什么好说的,双重循环,逐个比对,然后对调,是这几个算法里最简单也最容易理解的的排序算法。
1 | /** |
选择排序
选择排序,思路也比较容易理解,就是第一次循环查找最小的数字,放到数组的第一个位置,第二次继续在剩下的数据里找最小的,放到第二个位置,以次类推下去。
1 | /** |
插入排序
插入排序,将数据分为已排序过的和未排序的2个区间。
刚开始的时候,将数组第一个数字当作已排序区间。
后续的数据,会逐个与已排序过的数据进行比对和对调,直到达到正确的位置。
1 | /** |
归并排序
归并排序的思想就是分而治之,将一段数据以中心的,分成2个区间,然后利用递归继续拆分,分到不能再分为止,然后将无法继续拆分的数据进行排序,排序完成后,因为是递归,所以会逐层向上,进行排序。
这个是我写的第一个排序方式,后来发现merge方法里的temp数组太大了。所以我再后面又改了一版
1 | /** |
下面这个是改进过的
1 | /** |
快速排序
快速排序是一个使用比较多的排序。也用到了递归进行拆分,不过拆分条件和归并排序不一样。是根据基准点进行拆分的,每次执行都会找一个基准点,然后把比基准点小的数据放到基准点前面,比基准点大的放到基准点后面。这样多次递归之后,就会得到一个有序的数组。
1 | /** |
Review 英文文章
tomcat的官网,大致介绍了tomcat和tomcat的使用
Tip 技巧
极客时间的专栏《数据结构与算法之美》
本周学习了该专栏中的9-12篇
学习了递归的实际用法和几个经典的排序算法。
出处:《数据结构与算法之美》(作者:王争)
https://time.geekbang.org/column/intro/126
Share 分享
在这次看专栏之前,我也曾使用过递归,但只是简单的单层的递归(简单的父子节点构成的数),关于递归,按照这篇专栏的介绍。
如何使用递归,应该有如下几个点:
1、中止条件,什么时候该结束递归。
2、递归如何进行拆分。
3、拆分后要做什么。