我是多米尼克,我在编程方面很陌生。
我对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是明确的。
获得详细的答案会很高兴
答案 0 :(得分:0)
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;
}
}
答案 1 :(得分:0)
sortiert
方法在数组中多次运行。对于每对元素,如果第二个元素(列表中后面的元素)大于第一个元素(if (array[j] > array[i])
),则它将交换两个元素,从而最终将以降序对列表进行排序
i
索引表示上面比较的“第一个值”,j
索引表示上面比较的“第二个值”。因此,j
将始终从i+1
开始,因为它必须始终在列表中的第一个值之后 。如果j = i
在for循环中,那么您将检查array[i] > array[i]
,因为在这种情况下j = i
;因为一个数字永远不会比其严格严格小,所以它总是返回false
,因此是不必要的操作。