我知道问题听起来很愚蠢,我真的无法弄清楚这段代码有什么问题吗?
void sort(int *arr, int size)
{
int min = 0;
for (int i = 0; i < size - 1; i++)
{
for (int j = i; i < size; j++)
{
if (arr[min] > arr[j])
{
min = j;
}
}
if (min != i)
{
Swap(&arr[i], &arr[min]);
}
}
}
以下代码应对arr
进行排序,但它给出了分段错误。
我通过调试器运行了这段代码,它在行
j
的值
for (int j = i; i < size; j++)
类似3234
(未初始化)的程序结束。但是j
应该是0
。
答案 0 :(得分:2)
在第二个for
循环中,它应该是j < size
,而不是i < size
。
答案 1 :(得分:1)
sort
函数中存在3个问题:
for
循环中的测试使用i
而不是j
。 j
已初始化,但测试始终成功,并且循环继续进行,使代码访问arr
超出其边界,从而导致不确定的行为。min
应该在外循环内初始化为i
,j
应该初始化为i + 1
是内部循环(次要)。这是更正的版本:
void sort(int *arr, int size) {
for (int i = 0; i < size - 1; i++) {
int min = i;
for (int j = i + 1; j < size; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
if (min != i) {
Swap(&arr[i], &arr[min]);
}
}
}