【数据结构】选择排序

  1. 选择排序的基本思想:
    每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待
    排序的数据元素排完。

直接选择排序的动图演示


  1. 选择排序的思路
  • 准备我们给定一个随机排列的数组arr\[\],在数组中找好元素对应的下标
  • 在待排序的数组元素中,找出最大(最小)的数据元素;
  • 如果找出来的这个最大(最小)数据元素不是这个数组中的第一个元素,则与数组中的最后一个元素(第一个元素)进行交换;
  • 交换完之后已排序的元素+1,待排序的元素-1,再从待排序的元素序列中重复,知道集合剩下最后一个元素最小(最大)元素;

大致思路代码:

选择排序总体思路解析

  • 定义最大和最小都在第一个元素,后续遍历找出最大(最小)
  • 遍历完之后找出的maxi和mini分别和end和begin交换
  • 注意:为了避免maxi和begin都在同一个位置。遍历完之后,mini与begin交换后,maxi反倒成了最小的元素。我们给予判断条件:如果maxi和begin同一位置,那么将mini的值给maxi,也不妨碍后续交换

代码实现:

c 复制代码
void SelectSort(int* arr, int n)
{
	int begin = 0;//首位置
	int end = n - 1;//末位置
	while (begin < end)
	{
		int maxi = begin, mini = begin;//最大值和最小值的定义,每次循环都让maxi和mini处于首元素
		for (int i = begin + 1; i <= end; i++)
		{
			if (arr[i] > arr[maxi])
			{
				maxi = i;
			}
			if (arr[i] < arr[mini])
			{
				mini = i;
			}
		}
		if (maxi == begin)//为了防止出现交换差错,让maxi成了最小
		{
			maxi = mini;
		}
		Swap(&arr[mini], &arr[begin]);
		Swap(&arr[maxi], &arr[end]);
		++begin;
		--end;
	}
}

时间复杂度:O(n^2)

相关推荐
Data analyse4563 分钟前
rrweb回放事件资源加载顺序重放校验
前端·人工智能·算法·机器学习·数据分析
昨夜见军贴06166 分钟前
原始采样记录数字化落地,IACheck AI 报告文档审核 Agent 实现监测文档校验自动化
人工智能·算法·自动化
微学AI21 分钟前
从历史曲线到提前预警:TimechoAI 的时序预测与业务落地实践
人工智能·算法
不会就选b42 分钟前
算法日常・每日刷题--<动态规划>26
算法·动态规划
荆棘鸟智能1 小时前
虫情测报灯图像识别算法实践:小目标检测、粘连计数与飞虱细粒度分类
算法·目标检测·分类
爱读书的小胖1 小时前
LeetCode 27. 移除元素(C)解题分析
数据结构·算法
科技小E1 小时前
敏感数据不敢上云训练?本地大模型推理服务器DLTM私有化部署,让训练全程留在企业内网
大数据·算法·自动化
小草cys2 小时前
用 GPT 直接生成可编辑 PPTX 的实操记录,artifact-tool是OpenAICodex环境专用
gpt·算法·pptx
爱读书的小胖2 小时前
Codewars: A Brave New Wordle(C)解题分析
c语言·数据结构·算法
Escalating_xu2 小时前
【数据结构】顺序表的应用:动态通讯录项目与双指针经典算法
c语言·数据结构·算法