【发布时间】:2016-12-06 07:46:49
【问题描述】:
我正在编写一个排序函数来在 C 中实现冒泡排序,但它没有对给定的数组进行排序。这是以下代码。我正在使用 void 函数,因此我无法返回数组并且必须在现有数组中进行更改。代码可以很好地编译并运行,但它不会对数组进行排序。
void sort(int values[], int n)
{
// TODO: implement an O(n^2) sorting algorithm
for(int i = 0; i < n; i++)
{
int sp = 0;
for(int j = 0; j < n; j++)
{
if (values[i] > values[i + 1])
{
int first_val = values[i];
int second_val = values[i + 1];
values[i] = second_val;
values[i + 1] = first_val;
sp = 1;
}
}
if (sp == 0)
{
break;
}
}
}
【问题讨论】:
-
当
i位于n-1时,您将values[n-1]与values[n]进行比较,并且数组中没有values[n](索引运行0..n-1)。这是未定义的行为,会导致错误的结果。可能还有其他问题,但这是一个需要解决的重要起始问题。
标签: c arrays sorting bubble-sort cs50