【发布时间】:2012-05-15 04:24:14
【问题描述】:
我正在尝试为字符串的arraylists 实现合并排序算法,但我似乎找不到导致arraylist 排序的错误。
private static void sort(java.util.ArrayList<String> a)
{
// End recursion
if (a.size() < 2)
{
return;
}
int mid = a.size() / 2;
java.util.ArrayList<String> left = new java.util.ArrayList<String>();
int i;
for (i = 0; i < mid; i++)
{
left.add(a.remove(i));
}
java.util.ArrayList<String> right = new java.util.ArrayList<String>();
// Copy the second half to the "right"
for ( ; i < a.size(); i++)
{
right.add(a.remove(i));
}
sort(left);
sort(right);
merge(a, left, right);
}
private static void merge(java.util.ArrayList<String> result, java.util.ArrayList<String> left,java.util.ArrayList<String> right)
{
int i, l, r;
i = l = r = 0;
while (l < left.size() && r < right.size())
{
if ((left.get(l)).compareTo(right.get(r)) < 0)
{
result.add(left.get(l));
l++;
}
else
{
result.add(right.get(r));
r++;
}
i++;
}
while (l < left.size())
{
result.add(left.get(l));
l++;
i++;
}
// Append rest of the values in the right half, if any...
while (r < right.size())
{
result.add(right.get(r));
r++;
i++;
}
}
【问题讨论】:
-
它看起来像家庭作业,你没有告诉我们你尝试了什么或问题是什么......
-
其实我告诉过你问题是什么,如果你读了我的声明。我说“似乎找不到破坏数组列表排序的错误。”换句话说,数组列表没有正确排序。它是一个字符串数组列表,因此显然字符串不是按字母顺序排列的。另外我敢打赌,你说这看起来像是每张新海报的功课。不管怎样,你想让我告诉你什么我已经尝试过?告诉我我尝试了什么是毫无用处的,因为我是一个相对较新的程序员,很多都是完全错误的。
-
因为要对字符串数组进行排序,所以可以使用 Collections.sort 或简单地将字符串放入 TreeSet 中,如果删除重复项是明智的,除非分配说要实现合并排序或那里是推出自己的排序的一个很好的理由。你没有提到的。
-
公平地说,我应该提到我这样做是出于教育目的。我知道我可以只使用 java 标准库,但我试图完全理解合并排序背后的逻辑。学习它的最好方法是自己实现它。
-
当然。那么问题是什么?返回的输入列表是不变的,还是只是部分排序的?你试图找到什么问题?它是否适用于某些输入?是否返回所有输入元素?