基本思想
每一趟(第i趟,i=0,1,…,n-2)在后面n-i个待排序的数据元素集合中选出关键码最小的数据元素,作为有序元素序列的第i个元素。待到第n-2趟做完,待排序元素集合中只剩下1个元素,排序结束。
- 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素
- 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换
- 在剩余的array[i]–array[n-2](array[i+1]–array[n-1])集合中,重复上述步骤,直到集合剩余1个元素
代码实现
void SelectSort(int* array, size_t n) //选择排序
{
size_t min = 0;
size_t temp = 0;
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
min = i;
for (j = i + 1; j < n; j++) //找到cur之后 所有数中的最小值
{
if (array[j] < array[min])
{
min = j;
}
}
if (min != i)
{
temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
时间复杂度及稳定性
时间复杂度:O(n2)
稳定性:不稳定