为什么选择排序中的for循环有n-1步而不是n步? C++
Why does the for loop in selection sort have n-1 steps instead of n? C++
我有以下尝试用 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;
}
根据我的测试,它 returns 排序数组,所以我认为它是正确的。
但是我也必须解释为什么排序的主for循环只需要n-1步而不是n步。谁能给我解释一下 "why" 部分?
如果 n
为 1,请考虑需要多少步。
基本上,您不需要对第一个元素进行排序。
排序是通过比较对个元素来完成的。
N 个元素的数组中有多少对? (提示:N-1)
This animation 可能有助于解释该算法的工作原理。
我有以下尝试用 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;
}
根据我的测试,它 returns 排序数组,所以我认为它是正确的。
但是我也必须解释为什么排序的主for循环只需要n-1步而不是n步。谁能给我解释一下 "why" 部分?
如果 n
为 1,请考虑需要多少步。
基本上,您不需要对第一个元素进行排序。
排序是通过比较对个元素来完成的。
N 个元素的数组中有多少对? (提示:N-1)
This animation 可能有助于解释该算法的工作原理。