在我的作业中,第三步是调用方法合并以合并list1中的两个列表,以便list1 保持排序。
我编写了我的代码但它运行不正常,输出显示错误,因为它很重要
public static void merge (ArrayList<Integer> list1, ArrayList<Integer> list2)
{
int i;
int n=list1.size();
int pos , j=0;
for (pos =0 ;pos<n ; pos++)
{
for ( i=0 ; i<n ; i++)
if (list1.get(j)>list2.get(pos))
list1.add(pos,list2.get(pos));
else
j++;
}
}
答案 0 :(得分:8)
假设两个列表都已排序,您只需要一个for
循环:
public static void merge(List<Integer> l1, List<Integer> l2) {
for (int index1 = 0, index2 = 0; index2 < l2.size(); index1++) {
if (index1 == l1.size() || l1.get(index1) > l2.get(index2)) {
l1.add(index1, l2.get(index2++));
}
}
}
如果未对l2
进行排序,则需要两个循环:
public static void merge(List<Integer> l1, List<Integer> l2) {
for (int index2 = 0; index2 < l2.size(); index2++) {
for (int index1 = 0; ; index1++) {
if (index1 == l1.size() || l1.get(index1) > l2.get(index2)) {
l1.add(index1, l2.get(index2));
break;
}
}
}
}
答案 1 :(得分:2)
轻松修复:事后排序。
list1.addAll(list2);
Collections.sort(list1);
使用集合来避免重复。
答案 2 :(得分:1)
public static void merge (ArrayList<Integer> list1, ArrayList<Integer> list2)
{
list1.addAll(list2);
Collections.sort(list1);
}
答案 3 :(得分:0)
合并列表后,请调用sort方法,如下所示。
Collections.sort(list1); // carries out natural ordering.
如果您需要自定义排序,请使用Comparator对象
Collections.sort(list1, comparatorObject);
查看Comparator example了解详情。
以下是您修改后的代码:
public static void merge (ArrayList<Integer> list1, ArrayList<Integer> list2)
{
list1.add(list2); //merges list 2 to list1
Collections.sort(list1); //natural ordering
}
答案 4 :(得分:0)
如果输入列表不是太长,我建议只合并列表并使用Collections.sort()
方法恢复订单:
public static void mergeAndSort(List<Integer> list1, List<Integer> list2) {
List<Integer> combinedList = new ArrayList<Integer>(list1);
combinedList.addAll(list2);
Collections.sort(combinedList);
return combinedList;
}
作为旁注,您应尽可能使用List
接口而不是ArrayList
实现类。
答案 5 :(得分:0)
def BinarySearchTree
def initialize
@find_work_node = ...
end
end
}
答案 6 :(得分:-2)
ArrayList<Integer> a = new ArrayList();
ArrayList<Integer> b = new ArrayList();
ArrayList<Integer> c = new ArrayList();
a.add(1);
a.add(3);
a.add(5);
a.add(7);
a.add(17);
a.add(27);
a.add(37);
b.add(0);
b.add(2);
b.add(4);
while( a.size() > 0 || b.size() >0){
if( a.size() == 0 || b.size() == 0){
c.addAll(b);
c.addAll(a);
break;
}
if(a.get(0) < b.get(0)){
c.add(a.get(0));
a.remove(0);
}
else{
c.add(b.get(0));
b.remove(0);
}
}
System.out.println(c.toString());