双指针
一、引子
在我早期刷leetcode入门题时就很喜欢用双指针了,下面我来详细说明一下什么是双指针以及双指针的一些应用场合,首先,双指针这个翻译已经很明确的指出了这种编程技巧的思想了,就是定义两个指针,然后对这两个指针操作从而达到降低时间复杂度的目的(如果能使用常数倍空间复杂度来使得时间复杂度成指数倍下降,这种好事何乐而不为)
关于双指针算法的例子可以看:https://www.cnblogs.com/zyq79434/p/14753000.html
其实有的时候我们可以用三个指针或者四个指针,只要是有限个,那对于空间复杂度来说都是O(1),但是可以达到简化时间复杂度的目的。在我们编程时,假如要对一个数组进行操作,如果当前的操作受限于这个数组的前某一项(是不知到的一项)这个时候就可以利用双指针,把前面的项定位出来便于后面的操作。或者有些时候要让数组任意两个位置动态的改变,这时候也需要用双指针。
总之双指针是一种和方便的编程思想,有的时候可以简化不少操作。
例1、归并排序
归并排序属于基础排序算法中的一种,这里有兴趣的读者可以在各种算法书或者博客上找到归并排序的描述,所以我不在对归并排序进行描述了。
https://www.cnblogs.com/chengxiao/p/6194356.html,感兴趣可以看这位的博客。
归并排序的排序函数
非递归实现方法
非递归实现方法,我们可以把这个数组先两两拆分然后归并,这是第一次循环,第一次大循环结束后就四四拆分,然后八八拆分依次类推,直到最后预计拆分的个数达到了数组大小,就不用再拆分了。请读者根据该思想自行理解代码
原文:https://www.cnblogs.com/zyq79434/p/14847430.html