【发布时间】:2014-01-01 19:50:38
【问题描述】:
在最近对递归版本进行编码后,我一直在尝试理解非递归 MergeSort 算法。我的 AP 书没有提供太多关于这个主题的信息或例子,所以我希望有人能帮我把事情弄清楚一点。
我的书是什么意思:“在非递归的mergeSort方法中。我们将列表分成两个大小相等的部分,并使用选择排序对每个部分进行排序,然后使用将在中讨论的算法将两者合并B 部分。”
是否总是在非递归的 mergeSort 方法中将数组分成两部分(然后相应地对它们进行排序),或者是否存在像递归版本这样的情况,您会一直分割直到 array.length 为 2 或 1 ?
图书代码:
void mergeSort (ArrayList <Integer> A, int first, int last){
int mid;
mid = (first + last) / 2;
selectionSort (A, first, mid);
selectionSort (A, mid+1, last);
merge (A, first, mid, last);
}
如果你总是把数组分成2份然后排序,效率如何?如果您的数组包含数千个值会发生什么。 . .递归会不会更好,因为它将值分成更小的部分?
图书演示:
【问题讨论】:
标签: java algorithm merge mergesort