SelectionSort和for循环

时间:2018-04-09 15:06:40

标签: java arrays selection

我是多米尼克,我在编程方面很陌生。

我对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是明确的。

获得详细的答案会很高兴

2 个答案:

答案 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,因此是不必要的操作。