大家好,我是凉糖。在上一篇文章中,我们通过海盗瓜分金币的问题,详细讲解了递归的方法。我们可以认为在递归的过程中,我们通过函数调用自己,把大问题变成小问题,从而简化编码和建模。递归的思想很关键,因为很多算法都是基于递归展开的。其中最经典的就是分治算法,应该算是递归思想最经典的应用了,也是面试的常客。分治算法的经典应用就是归并排序和快速排序这两种排序算法,那么今天我们就来深入探讨一下这两种排序算法。从中理解分治算法,然后依次加深对递归思想的理解。好了,废话不多说,进入正题。归并排序归并排序的代码看起来有点复杂,但是其思想很简单。它的核心原理只有一句话:将两个排序好的数组合并在一起的复杂度是。合并操作称为合并,即将两个有序数组中的元素合并到同一个数组中,并保持数组的顺序。举个例子,假设我们有两个数组a和b,我们要把里面的元素全部放到数组c中,同时还要保证数组c中的元素还是有序的。a=[1,4,6]b=[2,4,5]c=[]我们用i和j分别表示两个数组a和b的下标。一开始,i,j=0,0。我们不断比较a和b数组i和j的位置关系,将较小的数填入c。填入一个数后:i=1j=0a=[1,4,6]b=[2,4,5]c=[1]填入两个数后:i=1j=1a=[1,4,6]b=[2,4,5]c=[1,2]我们重复上面的步骤,直到将a和b数组中的所有数字都填入到c数组中。这个操作的代码非常好写,我这里提供了Python版本。主要原因是Python代码更接近伪代码,更容易理解。defmerge(a,b):i,j=0,0c=[]whilei
