【数据结构】直接选择排序详解!

文章目录

1.直接选择排序

  • 🐧 begin 有可能就是 maxi ,所以交换的时候,要及时更新 maxi

  • 🍎 直接选择排序是不稳定的,例如: 9 [9] 5 [5],排序后,因为直接选择排序是会交换数据的,排序后可能变成了 [5] 5 [9] 9
cpp 复制代码
// 直接选择排序
// 时间复杂度: O(n^2)
void SelectSort(int* a, int n)
{
	int begin = 0, end = n - 1;

	while (begin < end)
	{

		int mini = begin, maxi = begin;

		for (int i = begin; i <= end; i++)
		{
			if (a[i] < a[mini])
				mini = i;

			if (a[i] > a[maxi])
				maxi = i;
		}

		Swap(&a[begin], &a[mini]);

		// 此时的 maxi 有可能已经改变
		if (begin == maxi)
			maxi = mini;


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

		begin++, end--;
	}
}
相关推荐
代码AC不AC1 分钟前
【C++】智能指针
c++·智能指针
zzzsde9 分钟前
【C++】二叉搜索树
开发语言·c++
fashion 道格13 分钟前
C 语言希尔排序:原理、实现与性能深度解析
数据结构·算法·排序算法
无限进步_22 分钟前
C语言atoi函数实现详解:从基础到优化
c语言·开发语言·c++·git·后端·github·visual studio
如意猴23 分钟前
实现链式结构二叉树--递归中的暴力美学(第13讲)
数据结构
AA陈超23 分钟前
ASC学习笔记0022:在不打算修改属性集时访问生成的属性集
c++·笔记·学习·ue5·虚幻引擎·unreal engine
初夏睡觉24 分钟前
P1048 [NOIP 2005 普及组] 采药
数据结构·c++·算法
上去我就QWER25 分钟前
C++中的堆和栈
开发语言·c++
小欣加油25 分钟前
leetcode 1513 仅含1的子串数
c++·算法·leetcode·职场和发展
专注VB编程开发20年34 分钟前
.net按地址动态调用VC++DLL将非托管DLL中的函数地址转换为.NET可调用的委托
开发语言·c++·c#·.net