简单选择排序是不稳定的排序,其排序过程大致如下:
(1)从待排序序列中,找到最小的元素
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换
(3)从余下的元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束
其排序的时间复杂度为:O(n^2)(循环套循环),空间复杂度为:O(1)(只需交换)
示例:
代码实现大致如下(示例):
int GetMin(int* ar, int left, int right)
{
int min = ar[left];
int index=left; //初始left最小
for (int i = left + 1; i < right; i++)
{
if (ar[i] <min)
{
min = ar[i];
index = i; //更新索引
}
}
return index;
}
void SelectSort(int* ar, int left, int right)
{
for (int i = left; i < right-1; i++) //最后一个数据不需要再去选择
{
int index = GetMin(ar, i, right);
if (index != i)
Swap(&ar[i], &ar[index]);
}
}