选择排序
1 基本原理
1 核心思想:选择排序是一种简单直观的排序算法。它在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
2 实例说明
如上图所示,以一组数据{12,6,1,15,3,19} 为例,进行直接插入排序的算法演示:
- 在原数组中选择最小元素 1 ,交换到数组头部。原数组分为两个部分:已排序序列和未排序序列。
- 在未排序序列中选择最小元素 3 ,交换到已排序序列中。
- 重复第2步操作,直至未排序序列中元素数量为0,排序完成。
3 代码实现
void SelectSort(vector<int> &a)
{
for (int i = 0; i<a.size(); i++)
{
int min = a[i];
for (int j = i + 1; j<a.size(); j++)
{
if (min>a[j])
{
swap(min, a[j]);
}
}
a[i] = min;
for (auto x : a) //排序过程输出
cout << x << " ";
cout << endl;
}
}
4 性能分析
- 1 时间复杂度:
选择排序的比较次数为 n(n-1)/2,交换次数介于0和(n-1)次之间,故而在最优、最坏和平均情况下,其时间复杂度为 O(n^2)。 - 2 空间复杂度:
选择排序过程中,需要临时变量存储待排序元素,因此空间复杂度为O(1)。 - 3 算法稳定性:
选择排序是不稳定的算法,在选择数值和交换过程中它们的顺序可能会发生变化。