为什么这种排序不起作用
Why won't this sorting work
好的,所以我写了一个方法来对 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);
}
}
您正在用第 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);
}
}
好的,所以我写了一个方法来对 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);
}
}
您正在用第 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);
}
}