好的,所以我编写了一个对 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);
}
}
最佳答案
当你执行这一行时:
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);
}
}
关于java - 为什么这个排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760454/