【发布时间】:2021-04-26 02:09:42
【问题描述】:
int main()
{
int a[7] = {4,33,11,8,12,123,2}, temp;
for (int i = 7; i >= 0; i--)
{
for (int j = 7; j > 7 - i; j--)
{
if (a[j] > a[j - 1])
{
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
for (int i = 0; i < 7; i++)
cout << a[i] << " ";
}
嘿,我想对数字进行冒泡降序排序,但我有一个问题,我的代码使用 (ai >= 0) 并且当我输入负数时给出了错误的输出。 例如当我输入 {4,33,-1,8,12,123,2} 时,输出是
123 33 12 8 4 2 0
【问题讨论】:
-
您有一个 off-by-1 错误。你的数组有元素 a[0] 到 a[6],但你从 7 开始循环。
-
您的程序有时似乎可以工作只是巧合 - 您在数组外部进行索引,并且具有未定义的行为。
-
如前所述,您有一个错误,但为什么要使用降序循环?它们更难理解,也许是你一开始就犯了一个错误的原因。仅仅因为您按降序排序并不意味着您必须使用降序循环进行冒泡排序。
-
for (int i = 0; i < n; i++) ...的反向循环是for (int i = n-1; i >=0; i--)...。这里没有反向循环的意义。如果您这样做是为了练习,您现在已经注意到为什么每个人都讨厌反向循环。 -
@ayco 如果一个数组有 7 个元素,那么索引的有效范围是 [0, 7),也就是说你不能使用表达式 a[7]。
标签: c++ arrays sorting for-loop bubble-sort