有人可以解释为什么这个方法的交换部分有效,我已经使用这个方法已经有一段时间了,但我无法理解交换部分的工作原理。如果有人能够解释,我将不胜感激。谢谢
public static int [] selectionSort(int [] num){
int min=0,minIndex=0;
for(int i=0; i< num.length-1;i++){
min=num[i];
for(int x=i+1;x<num.length;x++){
if(min > num[x]){
min=num[x];
minIndex=x;
}
}
//this is the part Im so confused about
if(num[i]> min){
int temp=num[i];
num[i]=num[minIndex];
num[minIndex]=temp;
}
}
return num;
}
答案 0 :(得分:1)
选择排序的整个概念是选择下一个最小元素的索引并将其移动到正确的位置。
在每次选择排序的迭代中,挑选来自未排序子阵列的最小元素(考虑升序)并移动到已排序的子阵列。
以下示例解释了上述步骤:
int arr[] = {64, 25, 12, 22, 11}
Find the minimum element in arr[0...4]
and place it at beginning
*11* 25 12 22 64
Find the minimum element in arr[1...4]
and place it at beginning of arr[1...4]
11 *12* 25 22 64
Find the minimum element in arr[2...4]
and place it at beginning of arr[2...4]
11 12 *22* 25 64
Find the minimum element in arr[3...4]
and place it at beginning of arr[3...4]
11 12 22 *25* 64 (64 is automatically sorted)
在每一步中,您都会找到minIndex
。然后,您将arr[minIndex]
中的值与arr[i]
中的值进行交换。
因此,在迭代0
,minIndex
将为4
,因为11
位于索引4
,而i
当然是0
因为它是第一次迭代......等等。
在迭代0,
num[i] => 64
和num[maxIndex] => 11
。
int temp = num[i]; // temp => 64
num[i] = num[minIndex]; // num[i] = num[minIndex] => 11
num[minIndex] = temp; // num[minIndex] => 64
迭代0后,
num[i] => 11
和num[maxIndex] => 64
。
答案 1 :(得分:0)
由于Java中的变量没有使用指针但是它们的值(call-of value而不是call-of reference),你需要分配一个temp变量来存储你的最小值。因为你设置了num [ i]到另一个号码,您需要以后能够访问该号码。
int temp=num[i]; //create temp variable to store the number in array num on index i
num[i]=num[minIndex]; // assign a new number to num on index i
num[minIndex]=temp; // now assign the temp number to num on index minIndex