文章目录
使用非递归来实现归并排序
一、原理
使用一个栈,来模拟递归的过程
本质:二叉树的非递归后序遍历
非递归时,我们直接定义要合并的小数组长度从1开始,在较小的长度数组都合并完成后,令长度*2,继续进行合并,直到合并完成。
二、代码实现
代码如下(示例):
1.实现代码
//使用非递归来实现归并排序
public static void mergeSortByLoop(int[] arr){
//gap 就等于当前待合并的有序数组的长度
for(int gap = 1; gap <= arr.length; gap*=2){
//外层循环第一次是把所以长度为 1 的数组两两进行合并
//第二次执行是把长度为 2 的数组两两合并
//第三次执行是把长度为 3 的数组两两合并
for(int i = 0; i < arr.length; i += 2*gap