算法——快速排序

递归——什么是递归?

递归更容易理解——函数自己调用自己。

 

 就像上图,在盒子堆里找一把钥匙。

递归能看的更加清楚,但在性能上并不占优势。

 

引入两个概念:基线条件和递归条件

不可能一直调用下去,当达到目的需要停止调用,这就需要一个基线条件。

而递归条件就是依旧继续调用的条件。

------------恢复内容开始------------

递归——什么是递归?

递归更容易理解——函数自己调用自己。

 

 就像上图,在盒子堆里找一把钥匙。

递归能看的更加清楚,但在性能上并不占优势。

 

引入两个概念:基线条件和递归条件

不可能一直调用下去,当达到目的需要停止调用,这就需要一个基线条件。

而递归条件就是依旧继续调用的条件。

 

在引出一个栈的概念:

 在数组和链表中,好像有一个待办事项清单,你可以将新的待办事项插入到清单的任何地方,也可删除任意一个待办事项。

一叠便条中, 插入的待办事项放在清单最前面----压入

读取待办事项时,只读取最上面的那个,完成了就将它删掉----弹出(读取并删除)

 

栈的一个特点就是  后进先出

 

 

 

当调用greet2()时,函数greet()只执行了一部分 又一个重点概念:调用另一个函数时,当前函数暂停并处于未完成状态

 

本章主题: 快速排序

先介绍一个D&C原理(一个思路):

①找出简单的基线条件

②不断分解问题,直到符合基线条件

 

比如说:要分一块土地,均匀分成方块,并且分出的方块要尽可能的大。怎么分?

比如一块长50宽25的土地,最大方块就是25 * 25 ,那么就是可以有两块

长1680米宽640米的,就有两个640 * 640 还有一块 640 * 400的

640*400里面又可以分出400 * 400  以此类推 到最后就是80*80

 

再比如求和  sum(1,2,3)就可以  1+sum(2,3)  = 1 + 5

 

工作原理:首先接受一个列表,如果列表为空就返回0 不然 计算列表中除了第一个数以外的其他数字的总和,在与第一个数相加,再返回结果。

 

排序算法里面

最简单的数组就是不需要排序的数组,空数组或者只有一个元素的数组。-->基线条件

工作原理:首先,选一个元素作为基准值。 观察数组并分类。你就可以得到 一个所有都小于基准值的数字组成的子数组, 一个基准值 和一个所有都大于基准值的数字组成的子数组。

最终的数组就是  小于基准值的 + 基准值 + 大于基准值的

比方:

归纳条件:如果我站在一个横踢上,能把脚放到上一个横梯上。

基线条件:我站在了第一个横梯上。

 

posted @ 2020-03-24 20:45  贼带劲儿  阅读(137)  评论(0)    收藏  举报