一.算法描述:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
以下面的5个数为例:
9 2 4 5 3
第1趟排序,结果是:2 9 4 5 3, 最小值索引的更新如下图所示:
第2趟排序:2 3 4 5 9
第3趟排序:2 3 4 5 9
第4趟排序:2 3 4 5 9
二、算法复杂度和稳定性的分析
1.时间复杂度:选择排序就其过程来看,它最大的特点是交换次数少,这样也就节约了时间。它的时间复杂度无论最好或者最坏都是一样多,即O(n^2)。虽然它的时间复杂度和冒泡排序是相同的,但是它的性能还是优于冒泡排序。
2.空间复杂度:O(1),用来存放最小值的索引。
3.稳定性:选择排序是不稳定的排序方法(比如序列[4 4 2]第一次就将第一个[4]与[2]交换,导致第一个4挪动到第二个4后面)。
三、选择排序的代码实现:
void SelectSort(int* arr, int len)
{
int i, j, min;
for(i=0; i<len-1; i++)
{
min = i;
for(j=i; j<len; j++)
{
if(arr[j] < arr[min])
min = j;
}
if(j!=min)
std::swap(arr[i], arr[min]);
}
}
void Print(int* arr, int len)
{
assert(arr);
for(int i=0; i<len; i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}