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

选择排序

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

直接选择排序**:**

在元素集合 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;
	}
}
相关推荐
vir026 分钟前
找出目标值在数组中的开始和结束位置(二分查找)
数据结构·c++·算法·leetcode
星沁城10 分钟前
73. 矩阵置零
java·算法·矩阵
薄荷冰ovo12 分钟前
C++中的提供的四种类型转换方式;
数据结构·c++
Sweet_vinegar18 分钟前
变异凯撒(Crypto)
算法·安全·ctf·buuctf
EricWang135824 分钟前
[OS] 项目三-1-proc.c: fork()探求
c语言·c++
小刘|44 分钟前
《Java 实现选择排序:原理剖析与代码详解》
java·算法·排序算法
CodeHackerBhx1 小时前
归并排序和随机化快速排序
数据结构·算法·排序算法
摆烂小白敲代码2 小时前
背包九讲——背包问题求具体方案
c语言·c++·算法·背包问题·背包问题求具体方案
Matlab程序猿小助手2 小时前
【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
开发语言·嵌入式硬件·算法·matlab·机器人
磁悬浮青蛙呱呱呱2 小时前
C语言自编以e为底的对数函数ln,性能接近标准库函数
c语言·初等函数·fmadd指令加速