选择排序
前置学习
了解排序的基本概念
点击传送门
原理
**选择排序(Selection Sort)**是从待排序的序列中选出最大值(或最小值),交换该元素与待排序序列头部元素,直到所有待排序的数据元素排序完毕为止。
实现
- 第一趟从n个元素的数据序列中选出关键字最小(或最大)的元素并放到最前(或最后)位置。
- 下一趟再从n-1个元素中选出最小(大)的元素并放到次前(后)位置。
- 以此类推,经过n-1趟完成排序。
代码
//定义数组
int arr[10] = { 9,1,5,6,10,8,3,7,2,4 };
//数组元素个数
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++)
{
int max = 0;//最大值下标
for (int j = 1; j < len - i; j++)
{
if (arr[max] < arr[j])
{
max = j;//记录最大值下标
}
}
//满足条件 交换数据
if (max != len - i - 1)
{
int temp = arr[max];
arr[max] = arr[len - i - 1];
arr[len - i - 1] = temp;
}
}
复杂度分析
时间复杂度:
平均时间复杂度:O(n²)
最好时间复杂度:O(n²)
最坏时间复杂度:O(n²)
选择排序最大的特点就是交换移动数据次数比较少,尽管与冒泡排序同为O(n²),但性能上略优于冒泡排序。
空间复杂度:
O(1),只需要一个额外空间用于交换。
稳定性:
不稳定排序