作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于CS作业,我正在尝试使用合并排序方法对ArrayList进行排序。这是我的代码:
public static LinkedList<Object> merge (LinkedList<Object> lsta, LinkedList<Object> lstb) {
LinkedList<Object> result = new LinkedList<Object>();
LinkedList<Object> lstaNew = (LinkedList<Object>) lsta.clone();
LinkedList<Object> lstbNew = (LinkedList<Object>) lstb.clone();
while(lstaNew.size()>0||lstaNew.size()>0) {
if(lstaNew.size()>0&&lstbNew.size()>0) {
if( ((Comparable) lstaNew.getFirst()).compareTo(lstbNew.getFirst()) < 0 ) {
result.add(lstaNew.getFirst());
lstaNew.remove();
}
else {
result.add(lstbNew.getFirst());
lstbNew.remove();
}
}
else if(lstaNew.size()>0) {
result.add(lstaNew.getFirst());
lstaNew.remove();
}
else {
result.add(lstbNew.getFirst());
lstbNew.remove();
}
}
return result;
}
public static LinkedList<Object> sort (LinkedList<Object> lst) {
if (lst.size() <= 1) return lst;
LinkedList<Object> left = new LinkedList<Object>();
LinkedList<Object> right = new LinkedList<Object>();
int midpoint = lst.size()/2;
for (int i=0;i<midpoint;i++) left.add(lst.get(i));
for (int i=midpoint;i<lst.size();i++) right.add(lst.get(i));
return merge(sort(left),sort(right));
}
但是,在我的结果中,我只得到了列表的前半部分。我在网上看过其他合并排序的例子,我的代码似乎很相似。我究竟做错了什么?如果您能指出正确的方向,我们将不胜感激。
最佳答案
您的代码中有一个拼写错误 -
while(lstaNew.size()>0||lstaNew.size()>0) {
应该是 -
while(lstaNew.size()>0||lstbNew.size()>0) {
关于java - 递归归并排序仅返回 ArrayList 的前半部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291941/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!