直接选择排序:最通俗易懂的排序算法

📋 前言

直接选择选择排序也是八大排序之一的排序算法,虽然实际应用上其实并不会选择它来进行排序,但它的思想和价值还是十分值得我的去学习的!

@TOC

一、直接选择选择排序的思想

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

每次遍历找到最大的和最小的俩个数en来存放在开头和末尾然后再一次重新遍历直到数组全部遍历完毕

  • begin == end

二、选择排序的构建

  • 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素

  • 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换

  • 在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素

2.1 选择排序的优化

上图每次都是找到其中一个数来进行排序,其实我们实际代码是可以优化一下的每次从

  • 前面开始找到 最大的 和最小的
  • 然后最小的放在前面, 最大的放在后面

2.1 代码实现

🍸 代码演示:

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

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

		}

		Swap(&a[mini], &a[begin]);
		
		if (maxi == begin)
		{
			maxi = mini;
		}
		Swap(&a[maxi], &a[end]);
		begin++;
		end--;
	}
}

📑 代码结果:

三、选择排序的总结

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

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

📝文章结语:

:cloud: 把本章的内容全部掌握,铁汁们就可以熟练应用switch语句啦! 看到这里了还不给博主扣个: ⛳️ 点赞🍹收藏 :star: 关注 💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖 拜托拜托这个真的很重要! 你们的点赞就是博主更新最大的动力! 有问题可以评论或者私信呢秒回哦。

相关推荐
杨福瑞11 小时前
数据结构:单链表(1)
c语言·开发语言·数据结构
Yupureki11 小时前
从零开始的C++学习生活 17:异常和智能指针
c语言·数据结构·c++·学习·visual studio
.柒宇.15 小时前
力扣hot100----15.三数之和(java版)
java·数据结构·算法·leetcode
杰克尼16 小时前
二分查找为什么总是写错
java·数据结构·算法
程序员阿鹏19 小时前
56.合并区间
java·数据结构·算法·leetcode
_OP_CHEN20 小时前
C++进阶:(三)深度解析二叉搜索树原理及实现
开发语言·数据结构·c++·二叉树·二叉搜索树·键值对
古译汉书20 小时前
Stm32江科大入门教程--各章节详细笔记---查阅传送门
数据结构·stm32·单片机·嵌入式硬件·算法
苏纪云1 天前
算法<C++>——双指针 | 滑动窗口
数据结构·c++·算法·双指针·滑动窗口
.格子衫.1 天前
023数据结构之线段树——算法备赛
java·数据结构·算法
壹佰大多1 天前
【Redisson分布式锁源码分析-3】
数据结构·分布式·mysql·spring·spring cloud·wpf·lua