for (int i = 1; i < N; ++i)
{
for (int j = i - 1; j >= 0; --j)
{
if (a[i] < a[j])
{
swap(a[i], a[j]);
}
else
break;
}
}
更正后如下:
for (int i = 1; i < N; ++i)
{
for (int j = N - 1; j > 0; --j)
{
if (a[j] < a[j - 1])
{
swap(a[j], a[j - 1]);
}
}
}
首先,里面那个 break
是不应该的,其次,比较的是相邻的两个元素的大小而不是 a[i]
和 a[j]
的。
不对,假设最初数列是1,2,3,4
1次得到 2,1,3,4
2次得到2,3,1,4
3次得到1,3,2,4.
你这不是典型的冒泡排序吗,建议好好看看冒泡排序到底往哪边冒
你这数组前边的数反复排序,后边的数只执行一次
万一最后的数最大怎么办