数据结构之排序--选择排序

选择排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

直接选择排序**:**

在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素
若它不是这组元素中的最后一个 ( 第一个 ) 元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]--array[n-2] ( array[i+1]--array[n-1] )集合中,重复上述步骤,直到集合剩余 1 个元素

直接选择排序的特性总结:

  1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
  2. 时间复杂度: O(N^2)
  3. 空间复杂度: O(1)
  4. 稳定性:不稳定

实现

cs 复制代码
void SelectSort(int* a, int n)
{
	int begin = 0, end = n - 1;
	while (begin < end)
	{
		int maxi = begin, mini = begin;
		for (int i = begin; i <= end; i++)
		{
			if (a[i] > a[maxi])
			{
				maxi = i;
			}

			if (a[i] < a[mini])
			{
				mini = i;
			}
		}

		Swap(&a[begin], &a[mini]);
		// 如果maxi和begin重叠,修正一下即可
		if (begin == maxi)
		{
			maxi = mini;
		}

		Swap(&a[end], &a[maxi]);

		++begin;
		--end;
	}
}
相关推荐
_w_z_j_4 小时前
数组中的最长连续子序列
数据结构·算法
地平线开发者4 小时前
征程 6E/M 计算平台部署指南
算法·自动驾驶
mit6.8244 小时前
数位dp|组合数学|差分emplace
算法
2301_764441334 小时前
新能源汽车电磁辐射高级预测
python·算法·数学建模·汽车
Keep_Trying_Go5 小时前
论文Leveraging Unlabeled Data for Crowd Counting by Learning to Rank算法详解
人工智能·pytorch·深度学习·算法·人群计数
仟濹5 小时前
【C/C++】经典高精度算法 5道题 加减乘除「复习」
c语言·c++·算法
顾安r5 小时前
11.21 脚本 网页优化
linux·前端·javascript·算法·html
车端域控测试工程师6 小时前
Autosar网络管理测试用例 - TC003
c语言·开发语言·学习·汽车·测试用例·capl·canoe
WolfGang0073216 小时前
代码随想录算法训练营Day27 | 56.合并区间、738.单调递增的数字、968.监控二叉树
算法
xiaoye-duck6 小时前
数据结构之排序-选择排序&交换排序
数据结构·排序算法