嵌套for循环中的变量范围c(cs50)

时间:2016-08-02 19:28:49

标签: c scope cs50

在此代码中,我应用选择排序,为什么我不能在包含注释的行使用变量i?感谢

void sort(int values[], int n)
{
    for (int i = 0; i < (n-2); i++){
        int iSmallest = i;
        for(int j = i + 1; j < (n-1); j++){
            if(values[j] < values[iSmallest])/*Why can't I use values[i] instead of values[iSmallest]?*/
            iSmallest = j;
    }

    int temp = values[i];
    values[i] = values[iSmallest];
    values[iSmallest] = temp;
}

1 个答案:

答案 0 :(得分:0)

在内循环中,您需要跟踪到目前为止找到的最小元素的索引。

在内部循环的开始处,您获取您查看的第一个元素的索引,即i,并用它初始化iSmallest。当您找到一个较小的元素后,将iSmallest更新为该元素的索引。

然后,当您完成内部循环时,使用该索引将最小元素与i处的元素交换。这将最小元素放在索引i处。然后你递增i并重复,找到下一个最小的元素。

变量i不在您评论的行中。在该行中使用if(values[j] < values[i])在语法上是合法的,但排序将无法正常工作。