SelectionSort and for循环

问题描述 投票:0回答:2

我对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是清楚的。

很高兴得到详细的答案

java arrays selection
2个回答
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;
    }
}

0
投票

sortiert方法正在数组中多次运行。对于每对元素,如果第二个元素(列表中的后面一个元素)大于第一个元素(if (array[j] > array[i])),则它将交换两个元素,从而最终将按降序对列表进行排序。 >

i索引表示上面比较的“第一值”,j索引表示上面比较的“第二值”。因此,j将始终从i+1开始,因为它必须总是after

列表中的第一个值。如果j = i处于for循环中,则您将要检查array[i] > array[i],因为在这种情况下,j = i;因为一个数字从不小于其自身,所以总是返回false,因此是不必要的操作。
© www.soinside.com 2019 - 2024. All rights reserved.