简单选择排序就是通过n-i次关键字之间的比较从n-i+1个记录里选出关键字最小的记录并和第i(1<=i<=n)个记录交换。
它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完。
给出交换过程图示:
代码如下:
template <class T>
void Select_sort(T *arr,int len)
{
for(int i =0; i<len;i++)
{
int min =i;
for(int j=i;j<len;j++)
{
if(arr[j]<arr[min])
{
min=j;
}
}
T tmp = arr[i];
arr[i]=arr[min];
arr[min]=tmp;
}
}
算法时间复杂度 O(n2)
算法稳定性:稳定
最大的特点就是交换移动数据次数较少,节约了相应的时间,虽然与冒泡排序时间复杂度相同 。但简单选择排序性能上略为比冒泡更好一点。
因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。