【问题标题】:Need help understanding segment of code需要帮助理解代码段
【发布时间】:2016-06-07 21:45:21
【问题描述】:
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 循环的最后三个语句中发生的事情吗?

【问题讨论】:

  • 你切换array[i]和array[highestIndex]的位置。为此,您需要复制array[i],以便在它被array[i] = array[highestIndex]; 覆盖后访问该值。

标签: java sorting for-loop selection selection-sort


【解决方案1】:

这是著名的交换程序。在像 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后,需要将其与外层持有的元素交换循环索引,这就是在这种情况下实现的。

【讨论】:

  • 谢谢,这正是我要找的。我知道交换了两个值,但我不明白它如何影响其余代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多