为什么选择方法不排序

时间:2019-05-11 00:51:41

标签: java sorting selection-sort

我不确定为什么“选择排序”方法没有更改数组。

public static int[] selectionSort(int[] array)
{
    int i, j, minVal, minIndex, temp = 0;

    for (i = 0; i < array.length; i++)
    {
        minVal = array[i];
        minIndex = i;

        for (j = i; j < array.length; j++)
        {
            if (array[j] < minVal)
            {
                minVal = array[i];
                minIndex = j;
            }
        }
        if(minVal < array[i])
        {
            temp = array[i];  
            array[i] = array[minIndex];
            array[minIndex] = temp;
        }
    }
    return array;
}

public static void main(String[] args)
{
    Random rand = new Random();

    int[] array = new int[10];

    for (int i = 0 ; i < array.length ; i++)
        array[i] = rand.nextInt(10)+1;

    System.out.println("Array Before Selection Sort: ");
    for(int i=0; i < array.length; i++)
        System.out.print(array[i] + " ");

    System.out.println();

    selectionSort(array);

    System.out.println("\nArray After Selection Sort: ");
    for(int i=0; i < array.length; i++)
        System.out.print(array[i] + " ");
}

代码输出相同的数组而不进行排序:

选择前数组排序: 4 7 9 9 8 10 3 7 1 3

选择后数组排序: 4 7 9 9 8 10 3 7 1 3

1 个答案:

答案 0 :(得分:1)

我认为selectionSort方法中有一个错字。 如果将i更改为j,则可以使用!

public static int[] selectionSort(int[] array)
{
    int i, j, minVal, minIndex, temp = 0;

    for (i = 0; i < array.length; i++)
    {
        minVal = array[i];
        minIndex = i;

        for (j = i; j < array.length; j++)
        {
            if (array[j] < minVal)
            {
                minVal = array[j]; // here
                minIndex = j;
            }
        }
        if(minVal < array[i])
        {
            temp = array[i];  
            array[i] = array[minIndex];
            array[minIndex] = temp;
        }
    }
    return array;
}