想知道这个排序算法错在哪,感觉没啥问题啊


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.

你这不是典型的冒泡排序吗,建议好好看看冒泡排序到底往哪边冒
你这数组前边的数反复排序,后边的数只执行一次
万一最后的数最大怎么办