时间复杂度:O(N²)
稳定性:不稳定
排序原理:
从前往后遍历,每一次遍历都从待排序数列的剩余数列中,选择最大(最小)数出来放置在数列前方
排序过程:(大到小)
1.从前向后遍历数组
2.初始假定已排序数列为data[0],从后面的数据中查找最大值所在位置(下标)
3.将找到的最大数与已排序的后一位做交换,已排序数列长度+1
4.遍历完成,排序完成
适用场景:
数据量少、算法时间要求低稳定性好的场景中,选排是一个比较好的选择
参数:
data 排序数据
lenth 数据量
direction 排序方向 从大到小/从小到大
源码:
void SelectionSort(int* data, int lenth, int direction){int index, i, j;for (i = 0; i < lenth - 1; i++)//从前往后遍历 将已排序的数据放在最前面{index = i;//已排序的后一位做基准比较值for (j = i + 1; j < lenth; j++)//从后续数列中查找最大(最小)数据的所在位置if (direction){if (data[index] > data[j])index = j;//找最大值}elseif (data[index] < data[j])index = j;//找最小值if (i != index)//这里的是判断找出来的数据所在位置不是紧邻着已排序后一位{DataSwap(data[index], data[i]);//交换两数}}}