我正在尝试进行选择排序,我将遍历一个整数列表,选出最小的数字,并将其与列表中前面的较大数字交换。这段代码只是用 4 个整数组成的短字符串进行练习。我正在努力解决的是在继续之前遍历整个整数列表以找到最小的数字。我发现这作为它自己的嵌套 for 循环非常有效,但是当我尝试交换整数时,我无法“记住”最小数字所在的索引(这将是被注释掉的代码行,因为它将不知道“j”是什么)。如果我尝试在 for 循环中执行此操作,那么我会过早地交换第一个小于我要交换的整数的整数,然后再查看是否有其他较小的整数。任何正确方向的提示将不胜感激。谢谢你!
int main (void)
{
int tmp;
int n = 4;
int values[] = {5,3,4,1};
for (int i=0; i < n; i++)
{
int minimum = values[i];
for (int j=1; j < n; j++)
{
if (values[j]<minimum)
{
minimum=values[j];
}
}
tmp = values[i];
values[i] = minimum;
//values[j] = tmp;
}
}
最佳答案
您需要添加一个变量minimumIndex
,它是最小值的索引。当您更新 minimum
的值时,将其设置为 j
,它将在循环结束时为您提供最小值的索引。还要使用正确的值对其进行初始化:由于 mimimum
已初始化为 values[i]
,因此 minimumIndex
应初始化为 i
.
另请注意,您有一个错误:您在 j=1
处启动内部循环,但它应该以 i
或 i+1
开头code> 以便跳过已放置的元素。
关于c - 如何在 C 中的 for 循环之外使用 for 循环索引(选择排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45420617/