【发布时间】:2014-03-20 18:27:26
【问题描述】:
我的教授分配了一个问题,我们必须使用堆栈(或队列)来进行非递归合并排序。当前代码如下:
private static void sort(Comparable[] a, int[] index, int[] aux, int lo, int hi) {
if (hi <= lo) return;
int mid = lo + (hi - lo) / 2;
sort(a, index, aux, lo, mid);
sort(a, index, aux, mid + 1, hi);
merge(a, index, aux, lo, mid, hi);
我不确定如何解决这个问题,如果有任何帮助,我将不胜感激。我知道我必须使用 while 循环来模拟递归。但是如何拆分实际值?另外,如何跟踪分区值的中间值?
我真的被这个问题搞糊涂了。任何帮助,将不胜感激!
【问题讨论】:
-
想想递归是如何工作的——将当前状态压入程序堆栈,处理新的数据子集,将结果返回给调用者,将先前的状态从堆栈中弹出并继续.在本练习中,您真正要做的就是将 call/return 替换为 push-iterate-pop。
标签: java