二、选择排序
1.算法核心
此算法是一个适用于刚学算法的人的简单算法,其核心原理就是查找。
例:
有一个序列为:1 3 6 2 5,问怎样可以得到序列:1 2 3 5 6。
先看到1,它后面没有值比它小,不用交换。再看到3,它后面比它小的最小值是2,3和2交换。然后是6,它后面比它小的最小值是3,6和3交换。这样查找并比较5+4+3+2+1次后,可得到序列:1 2 3 5 6。
2.代码
#include <iostream>
using namespace std;
int n, a[1005];
void selection_sort (int n)
{
for (int i = 0; i < n - 1; i++)
{
int min_num = 2147483647, min_i = 2147483647;
for (int j = i + 1; j < n - 1; j++)
{
if (a[j] < a[i])
{
if (min_num > a[j])
{
min_num = a[j];
min_i = j;
}
}
}
if (min_i != 2147483647)
{
swap(a[i], a[min_i]);
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
selection_sort(n);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}
3.复杂度分析
时间频度:
T(n + (n - 1) + (n - 2) + ······ + 3 + 2 + 1)
时间复杂度:
O(n * n)
空间复杂度:
O(1)