c (cs50) 中嵌套 for 循环中的变量范围
Variable scope in a nested for loop in c (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;
}
在内循环中,您需要跟踪您目前找到的最小元素的索引。
在内部循环的开始,您获取您查看的第一个元素的索引,即 i
,并用它初始化 iSmallest
。当您在那个较小的元素之后找到一个元素时,您将 iSmallest
更新为该元素的索引。
然后当您完成内部循环时,您使用该索引将最小元素与 i
处的元素交换。这会将最小元素放在索引 i
处。然后递增 i
并重复,找到下一个最小的元素。
变量 i
没有超出您评论的行的范围。在该行使用 if(values[j] < values[i])
在语法上是合法的,但排序将无法正常工作。
在这段代码中,我正在应用选择排序,为什么我不能在有注释的行使用变量 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;
}
在内循环中,您需要跟踪您目前找到的最小元素的索引。
在内部循环的开始,您获取您查看的第一个元素的索引,即 i
,并用它初始化 iSmallest
。当您在那个较小的元素之后找到一个元素时,您将 iSmallest
更新为该元素的索引。
然后当您完成内部循环时,您使用该索引将最小元素与 i
处的元素交换。这会将最小元素放在索引 i
处。然后递增 i
并重复,找到下一个最小的元素。
变量 i
没有超出您评论的行的范围。在该行使用 if(values[j] < values[i])
在语法上是合法的,但排序将无法正常工作。