选择排序(Selection Sort)是一种简单直观的排序算法,它的基本思想是每次从待排序的数据元素中选择最小(或最大)的一个元素,存放到序列的起始位置,直到全部待排序的数据元素排完为止。
具体的实现步骤如下:
1. 首先,在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置;
2. 然后,再从剩余未排序元素中继续寻找最小(或最大)元素,放到已排序序列的末尾;
3. 重复上述步骤,直到所有元素均排序完毕。
选择排序的时间复杂度为O(n^2),其中n为待排序元素的个数。尽管选择排序的时间复杂度较高,但由于其实现简单,代码量少,对于小规模的数据排序仍然是一种较为常用的排序算法。
然而,对于大规模数据的排序,选择排序的性能较差,不推荐使用。
选择排序的空间复杂度是O(1),因为它只需要一个额外的变量来交换元素。在每次迭代中,选择排序只需要比较并交换相邻元素,不需要申请额外的空间来存储数组。因此,选择排序的空间复杂度是常数级别的。
#include <iostream>
using namespace std;
void Selection Sort(int arr[], int nlen)
{
if (arr == nullptr || nlen <=0)
return;
for (int i = 0; i < nlen - 1; i++)
{
int Min = i;
for (int j = i + 1; j < nlen; j++)
{
if (arr[j] < arr[Min])
{
Min = j;
}
}
if (Min != i)
{
arr[i] = arr[i] ^ arr[Min];
arr[Min] = arr[i] ^ arr[Min];
arr[i] = arr[i] ^ arr[Min];
}
}
}
int main()
{
int arr[10]={1,4,7,4,3,6,8,4,6,8};
Selection Sort(arr,10);
for(int nVal:arr)
{
cout<<nVal<<" ";
}
cout<<endl;
return 0;
}