需要帮助理解代码段
Need help understanding segment of code
public int[] selectionSort(int array[]) {
for(int i = array.length - 1; i >= 0; i--) {
int highestIndex = i;
for(int j = i; j >= 0; j--) {
if(array[j] > array[highestIndex])
highestIndex = j;
}
int temp = array[i];
array[i] = array[highestIndex];
array[highestIndex] = temp;
}
return array;
}
我理解选择排序的概念,但代码让我感到困惑。具体来说,有人可以解释在以 "int temp = array[i];"
开头的外部 for 循环的最后三个语句中发生了什么
这就是著名的交换套路。在像 Java 这样的语言中,当你想交换两个名为 a
和 b
的变量的值时,你必须求助于这样一个例程,你使用第三个变量来保存一个在途价值:
int a = 2;
int b = 6;
int tmp = a; // now tmp has a value that is _copy_ of a i.e. 2
a = b; // since we saved a in tmp, we can _mutate_ it, now a has b's value
b = tmp; // swap! here, b = a won't work because a contains b's current value.
// now a has value 6 and b has value 2, exactly what we wanted.
在其他一些语言中,像 a, b = b, a
这样的结构可用于此目的,我认为这更直观。
选择排序中,内循环找到最大值的元素的index后,需要swap它与外循环索引所包含的元素一起使用,这就是它在该上下文中实现的目标。
public int[] selectionSort(int array[]) {
for(int i = array.length - 1; i >= 0; i--) {
int highestIndex = i;
for(int j = i; j >= 0; j--) {
if(array[j] > array[highestIndex])
highestIndex = j;
}
int temp = array[i];
array[i] = array[highestIndex];
array[highestIndex] = temp;
}
return array;
}
我理解选择排序的概念,但代码让我感到困惑。具体来说,有人可以解释在以 "int temp = array[i];"
开头的外部 for 循环的最后三个语句中发生了什么这就是著名的交换套路。在像 Java 这样的语言中,当你想交换两个名为 a
和 b
的变量的值时,你必须求助于这样一个例程,你使用第三个变量来保存一个在途价值:
int a = 2;
int b = 6;
int tmp = a; // now tmp has a value that is _copy_ of a i.e. 2
a = b; // since we saved a in tmp, we can _mutate_ it, now a has b's value
b = tmp; // swap! here, b = a won't work because a contains b's current value.
// now a has value 6 and b has value 2, exactly what we wanted.
在其他一些语言中,像 a, b = b, a
这样的结构可用于此目的,我认为这更直观。
选择排序中,内循环找到最大值的元素的index后,需要swap它与外循环索引所包含的元素一起使用,这就是它在该上下文中实现的目标。