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

选择排序

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

直接选择排序**:**

在元素集合 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;
	}
}
相关推荐
追随者永远是胜利者11 小时前
(LeetCode-Hot100)42. 接雨水
java·算法·leetcode·职场和发展·go
lifallen11 小时前
点分治 (Centroid Decomposition)
java·数据结构·算法
祈安_12 小时前
深入理解指针(一)
c语言·前端
田里的水稻13 小时前
FA_规划和控制(PC)-瑞德斯.谢普路径规划(RSPP))
人工智能·算法·数学建模·机器人·自动驾驶
罗湖老棍子13 小时前
【例 1】二叉苹果树(信息学奥赛一本通- P1575)
算法·树上背包·树型动态规划
元亓亓亓13 小时前
LeetCode热题100--76. 最小覆盖子串--困难
算法·leetcode·职场和发展
CHANG_THE_WORLD13 小时前
深入理解C语言指针:从源码到汇编的彻底剖析
c语言·开发语言·汇编
CHANG_THE_WORLD13 小时前
C++数组地址传递与数据影响:深入理解指针与内存
算法
json{shen:"jing"}13 小时前
力扣-单词拆分
数据结构·算法
aaa78713 小时前
Codeforces Round 1080 (Div. 3) 题解
数据结构·算法