我知道迭代merge sort可以在网上找到,但是我创建的这个实现似乎与我在网上看到的例子大不相同。
这是我所拥有的。我迭代地实现了这个,但认为它不正确,因为这不是recursive实现所遵循的。
递归实现splits/sorts一半然后另一个然后合并。此实现对整个列表进行拆分/排序,然后将它们与stack.
我的问题是,这是一个正确的迭代实现吗?
我想我应该使用 aqueue而不是 a stack。
public static List<Integer> iterativeMergeSort(List<Integer> nums){
Stack<List<Integer>> stack = new Stack<List<Integer>>();
for (int num : nums) {
stack.push(new ArrayList<Integer>(Arrays.asList(num)));
}
while (stack.size() > 1) {
List<Integer> a = stack.pop();
List<Integer> b = stack.pop();
stack.push(merge(a,b));
}
return stack.pop();
}
public static List<Integer> merge(List<Integer> a, List<Integer> b) {
int i = 0;
int j = 0;
List<Integer> merged = new ArrayList<Integer>();
while (i < a.size() && j < b.size()) {
if (a.get(i) == b.get(j)) {
merged.add(a.get(i));
merged.add(b.get(j));
i++;
j++;
}
else if (a.get(i) < b.get(j)) {
merged.add(a.get(i));
i++;
}
else { //a.get(i) > b.get(j)
merged.add(b.get(j));
j++;
}
}
while (i < a.size()) {
merged.add(a.get(i));
i++;
}
while (j < b.size()) {
merged.add(b.get(j));
j++;
}
return merged;
}
哈士奇WWW
扬帆大鱼
相关分类