为什么要赢得这种分类工作

时间:2015-01-03 22:58:46

标签: java sorting arraylist

好的,所以我编写了一个应该对ArrayList对象进行排序的方法。它确实......有点......该对象是一个包含20个随机数的数组,在执行下面显示的代码后,我得到以下结果:

[-7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 13, 13, 13, 13, 13, 13, 13, 27, 27, 27]

public static void sortArray (ArrayList<Integer> arrayToSort)
{
    int smallestNum;

    for (int j=0; j<arrayToSort.size(); j++)
    {
        smallestNum = arrayToSort.get(j);
        for (int i=j; i<arrayToSort.size(); i++)
        {
            if (arrayToSort.get(i)<=smallestNum)
            {
                smallestNum = arrayToSort.get(i);
            }
        }
        arrayToSort.set(j, smallestNum);
    }       
}

2 个答案:

答案 0 :(得分:2)

执行此行时:

arrayToSort.set(j, smallestNum);

你正在吹走已经在位置j中的任何东西并完全失去它,这就是为什么你看到-7重复,直到你到达原始数组中的-7。您希望将最小的数字交换到第j个位置,将第j个位置的数字替换为您抓取最小数字的位置。

你真正想要的更像是:

public static void sortArray (ArrayList<Integer> arrayToSort)
{
    int smallestNum;
    int smallestPos;

    for (int j=0; j<arrayToSort.size(); j++)
    {
        smallestNum = arrayToSort.get(j);
        smallestPos = j;
        for (int i=j; i<arrayToSort.size(); i++)
        {
            if (arrayToSort.get(i)<=smallestNum)
            {
                smallestNum = arrayToSort.get(i);
                smallestPos = i;
            }
        }
        arrayToSort.set(smallestPos, arrayToSort.get(j);
        arrayToSort.set(j, smallestNum);
    }       
}

答案 1 :(得分:0)

您正在用第i个索引值替换第j个索引值。因此,它会创建一个重复的条目,您也将丢失第j个索引中包含的先前值。

可能你需要这样的东西:

public static void sortArray (ArrayList<Integer> arrayToSort)
{
    int smallestNum;
    int smallestIndex;

    for (int j=0; j<arrayToSort.size(); j++)
    {
        smallestNum   = arrayToSort.get(j);
        smallestIndex = j;
        for (int i=j; i<arrayToSort.size(); i++)
        {
            if (arrayToSort.get(i)<=smallestNum)
            {
                smallestNum   = arrayToSort.get(i);
                smallestIndex = i;
            }
        }
        arrayToSort.set(smallestIndex, arrayToSort.get(j));
        arrayToSort.set(j, smallestNum);
    }       
}