在Java中使用ArrayList合并排序

时间:2014-03-06 17:07:58

标签: java arrays arraylist mergesort array-merge

我正在尝试合并这些ArrayLists。 list3是最后一个。一切都运行正常,但最后一个数字,400,不会出现在最后一个数组中。我不知道为什么或做什么。我正在尝试将ArrayList排序,我几乎已经完成了,除了最后一个不会显示的数字。

import java.util.ArrayList;
public class TextLab12st
{
    public static void main(String args[])
{
    int jsaList1[] = {101, 105, 115, 125, 145, 165, 175, 185, 195, 225, 235, 275, 305, 315, 325, 335, 345, 355, 375, 385};
    int jsaList2[] = {110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 270, 280, 320, 350, 400};

    Array list1 = new Array(jsaList1,"List #1");
    Array list2 = new Array(jsaList2,"List #2");
    Array list3 = new Array("Merged List");

    list3.merge(list1,list2,list3);

    list1.display();
    list2.display();
    list3.display();

}

}

class Array
{
private ArrayList<Integer> list;
private int size;
private String listName;

public Array(String ln)
{
    list = new ArrayList<Integer>();
    size = 0;
    listName = ln;
}

public Array(int[] jsArray, String ln)
{
    list = new ArrayList<Integer>();
    size = jsArray.length;
    listName = ln;
    for (int j = 0; j < size; j++)
        list.add( new Integer( jsArray[j] ));
}

public void display ()
{
    System.out.println("\n" + listName + ":\n");
    System.out.println(list + "\n");
}

public void merge(Array that, Array theOther, Array result)
{
    {
        // Merge both halves into the result array
        // Next element to consider in the first array
        int iFirst = 0;
        // Next element to consider in the second array
        int iSecond = 0;

        // Next open position in the result
        int j = 0;
        // As long as neither iFirst nor iSecond is past the end, move the
        // smaller element into the result.
        while (iFirst < that.size && iSecond < theOther.size) 
        {
            if (that.list.get(iFirst) < theOther.list.get(iSecond)) 
            {
                result.list.add(that.list.get(iFirst));
                iFirst++;
            } 
            else 
            {
                result.list.add(theOther.list.get(iSecond));
                iSecond++;
            }
            j++;
        }

    }

}

}

2 个答案:

答案 0 :(得分:4)

在两个数组上运行的循环之后:

    while (iFirst < that.size && iSecond < theOther.size) 
    {
        if (that.list.get(iFirst) < theOther.list.get(iSecond)) 
        {
            result.list.add(that.list.get(iFirst));
            iFirst++;
        } 
        else 
        {
            result.list.add(theOther.list.get(iSecond));
            iSecond++;
        }
        j++;
    }

你需要看看在你到达另一个阵列后,其中一个阵列中是否还有剩余的东西:

if (iFirst < that,size) {
   //copy everything remaining in that to output
} else if (iSecond < theOther.size) {
   //copy everything from theOther to output
}

答案 1 :(得分:1)

// this condition stops when you reach the end of either list
// you need to continue until you reach the end of both lists
 while (iFirst < that.size && iSecond < theOther.size)