我对SelectionSort有疑问。
请查看我的代码:
public static int[] sortiert(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[j] > array[i]) {
int speicher = array[i];
array[i] = array[j];
array[j] = speicher;
}
}
}
return array;
您能告诉我为什么第二个for循环中有j = i + 1吗?这困扰我...
array.length-第一个循环中的1是清楚的。
很高兴得到详细的答案
public static class SelectionSort
{
static int min;
public static void Sort(int[] data)
{
for (int i = 0; i < data.Length; i++)
{
for (int j = 0; j < data.Length; j++)
{
min = j;
if (data[i] < data[j])
Swap(x: ref data[i], y: ref data[min]);
}
}
}
private static void Swap(ref int x, ref int y)
{
x = x+y;
y = x-y;
x = x-y;
}
}
sortiert
方法正在数组中多次运行。对于每对元素,如果第二个元素(列表中的后面一个元素)大于第一个元素(if (array[j] > array[i])
),则它将交换两个元素,从而最终将按降序对列表进行排序。 >
i
索引表示上面比较的“第一值”,j
索引表示上面比较的“第二值”。因此,j
将始终从i+1
开始,因为它必须总是after
j = i
处于for循环中,则您将要检查array[i] > array[i]
,因为在这种情况下,j = i
;因为一个数字从不小于其自身,所以总是返回false
,因此是不必要的操作。