直接选择排序最好最坏情况时间复杂度均为O(n^2),不稳定,其优势在于最多只需交换n次,交换操作比比较操作耗时。
1. 算法思想
从待排序序列中选择最小的元素,放入有序序列的末尾;如此循环直至待排序序列为空。
2. 时间复杂度
最好情况 O(n^2):序列正序有序,无需交换元素,但比较时间为O(n^2)最坏情况 O(n^2):序列逆序有序,交换n次,比较O(n^2)
3. 空间复杂度 O(1)
就地排序,辅助空间为常数级
4. 稳定性
不稳定。存在不相邻元素的交换
5. 代码实现(C语言)
void SelectSort(int *A, int n)
{
int i, j, k;
int min, tmp;
for (i = 0; i < n - 1; ++i)
{
k = i;
min = A[i];
for (j = i + 1; j < n; ++j)
{
if (A[j] < min)
{
k = j;
min = A[j];
}
}
if (k != i)
{
tmp = A[i];
A[i] = min;
A[k] = tmp;
}
}
}