我不确定为什么“选择排序”方法没有更改数组。
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
答案 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;
}