当前位置: 首页 > article >正文

选择排序(详解)c++

选择排序(Selection Sort)是⼀种特别直观的排序算法。每次找出未排序序列中最⼩的元素,然后放进有序序列的后⾯

算法思想:

每次找出未排序序列中最小的元素,然后放进有序序列的后面

在数组中完成选择排序

 

落实到代码的时候就两步:找最小+交换

  • 在整个排序序列里面找出最小的一个元素
  • 和未排序序列里面第一个元素做交换 

代码实现:

测试代码:P1177 【模板】排序 - 洛谷

#include <iostream>
using namespace std;

const int N = 1e5 + 10;

int n;
int a[N];

void select_sort()
{
	//不取到n,最后一个肯定是有序的
	for (int i = 1; i <= n; ++i) //待排序区间的首位置
	{
		//[i, n] 待排序区间
		int pos = i;
		for (int j = i + 1; j <= n; ++j) //查找最小元素下标
		{
			if (a[j] < a[pos])
			{
				//更新pos
				pos = j;
			}
		}
		//此时pos是[i, n]区间最小元素,与待排序首元素做交换
		swap(a[i], a[pos]);
	}
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; ++i) cin >> a[i];

	select_sort();

	for (int i = 1; i <= n; ++i) cout << a[i] << " ";
	cout << '\n';

	return 0;
}

时间复杂度

⽆论数组有序还是⽆序,在未排序区间内找最⼩值的时候,都需要遍历⼀遍待排序的区间,因此时
间复杂度为 O(n*n  ),比如升序123456,第一次找最小元素要遍历数组1次找到1,第二次找最小要遍历5次找到最小元素2,依次类推再遍历4+3+2次找到5,如果有n个元素,要遍历n+(n-1)+…+2,时间复杂度是O(N*N)级别

http://www.kler.cn/a/558518.html

相关文章:

  • 智能控制基础应用-C#Codesys共享内存实现数据高速交互
  • 十、OSG学习笔记-多线程(OpenThreads)
  • android 网络防护 手机网络安全怎么防
  • ArcGIS Pro在洪水淹没分析中的应用与实践
  • 全面汇总windows进程通信(二)
  • MT7628基于原厂的SDK包, 修改ra1网卡的MAC方法。
  • 基于SpringBoot的二手交易系统
  • Hive中的分区和桶的概念及其作用
  • 《论边缘计算及其应用》审题技巧 - 系统架构设计师
  • 从人机环境系统智能角度看传统IP的全球化二次创作法则
  • 解决数据库建表错误:ERROR 1064 (42000) You have an error in your SQL
  • 网络安全营运周报
  • 线程的分离属性、互斥锁、信号量
  • 【Python爬虫(51)】深入剖析Scrapy框架:解锁高效爬虫的核心奥秘
  • MySQL 单表访问方法详解
  • Baklib知识中台重塑企业知识管理
  • 2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务
  • Linux 命令大全完整版(11)
  • Vue学习教程-15自定义指令
  • DeepSeek核心技术全景解析:架构革新与工程突破