为什么选择排序中的for循环有n-1步而不是n? C ++

时间:2018-01-07 15:34:43

标签: c++ sorting c++11 selection-sort

我有以下尝试在C ++中编写选择排序:

#include <iostream>

using namespace std;

int main()
{
    int a[10], k, i, j, n, aux;
    cin >> n;
    for (i = 0; i <= n-1; i++)
        cin >> a[i];
    k = a[0];
    for (i = 0; i <= n - 2; i++) {
        for (j = i + 1; j <= n-1; j++)
            if (k > a[j])
                k = a[j];
        for (j = i + 1; j <= n-1; j++)
            if (k == a[j]) {
                aux = a[i];
                a[i] = a[j];
                a[j] = aux;
            }
        k = a[i + 1];
    }
    for (i = 0; i <= n-1; i++)
        cout << a[i];
    return 0;
}

从我的测试中它返回排序的数组,所以我认为这是正确的。

但我还必须解释为什么排序的主要for循环只需要n-1步而不是n。任何人都可以向我解释“为什么”的一部分?

2 个答案:

答案 0 :(得分:3)

如果n为1,请考虑需要多少步骤。

基本上,您不需要对第一个元素进行排序。

答案 1 :(得分:3)

通过比较元素的来完成排序。

N个元素数组中有多少对? (提示:N-1)

This animation可能有助于解释算法的工作原理。