【数据结构与算法】选择排序

news2024/12/28 4:36:42

文章目录

  • 选择排序
    • 什么是选择排序?
    • 选择排序实例分析
    • 算法分析
    • 代码部分

选择排序

什么是选择排序?

选择排序是一种简单直观的排序算法。

它的工作原理是:每一轮从待排序列中选取一个值最小的元素,将它和当前序列的第一个元素互换。
可能看完以上原理有些手足无措,我们通过下面的实例进行分析!

选择排序实例分析

假定有n个元素存放在a[0]~a[n-1]中,第一轮从这n个元素中选取值最小的元素,将它和a[0]互换,此时a[0]中存放了n个数中最小的数;第二轮从a[1]~a[n-1]中这n-1元素中选取值最小的元素,将它和a[1]互换,此时a[1]存放的就是n个数中次小的数;依次下去,共进行n-1轮比较,a[0]~a[n-1]就按由小到大顺序存放了。
如下图所示,每轮排序中发生交换的元素已经用红色方框圈出来了!
20230119_选择排序_1
看完这张图是不是恍然大悟了呢?
当然,学习一个算法的同时我们也要去学会分析它的时间复杂度和空间复杂度。

算法分析

选择排序中第i趟排序中选出最小的元素需要进行n-i次比较,因此总的比较次数为:
∑ i = 1 n − 1 ( n − i ) = n ( n − 1 ) 2 = O ( n 2 ) \sum_{i=1}^{n-1} (n-i) = \frac{n(n-1)}{2} = O(n^2) i=1n1(ni)=2n(n1)=O(n2)
辅助空间为: O ( 1 ) O(1) O(1) , 并且选择排序是不稳定的.

代码部分

#include <iostream>
using namespace std;

void sort(int *x,int n){ //通过x指针来访问数组元素,n表示数组元素个数 
	for(int i=0;i<n-1;i++){	//n个数只需要进行n-1次排序 
		int k = i;		//用来保存当前序列首元素下标 
		for(int j = i+1;j<n;j++){
			if(*(x+j)<*(x+k)){
				k = j;		//若存在比当前序列首元素大的数字就记录其下标 
			}
			if(k!=i){	//若 k!=i 便说明在后面序列中存在比首元素大的元素,则进行交换  
				int t = *(x+i);
				*(x+i) = *(x+k);
				*(x+k) = t;
			}
			
		}
	}
}

int main(void)
{
	int a[10];
	cout<<"请输入排序前的元素:"<<endl;
	for(int i=0;i<10;i++){
		cin>>a[i];
	}
	sort(a,10);
	cout<<"排序后的元素如下:" <<endl;
	for(int i=0;i<10;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
		
	return 0;
} 

运行结果如下:
20230119_2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GD32F427开发板试用】4. ADC采集摇杆模块移动量

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…

vue利用provide和inject做套娃组件设计

provide和inject原来用的不多&#xff0c;只是见人引用axios的时候在main.js里使用provide来注入 app.provide(axios, axios) 这样&#xff0c;在所有的vue文件里都可以使用inject来获取这个注入的axios const axios inject("axios"); 这种利用provide和inject做…

(考研湖科大教书匠计算机网络)第一章概述-第五节3:计算机网络体系结构之相关专业术语

文章目录一&#xff1a;实体二&#xff1a;协议三&#xff1a;服务四&#xff1a;协议数据单元本节对应视频 【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】&#xff1a;1.6 计算机网络体系结构&#xff08;4&#xff09;—专用术语 注意&#xff1a;本节内容…

2023MyBatis精选面试题2(8道)

一. MyBatis的框架架构设计是怎么样的这张图从上往下看。MyBatis的初始化&#xff0c;会从mybatis-config.xml配置文件&#xff0c;解析构造成Configuration这个类&#xff0c;就是图中的红框。1. 加载配置&#xff1a;配置来源于两个地方&#xff0c;一处是配置文件&#xff0…

【阅读笔记】《重构》 第一二章

第一章 重构&#xff0c;第一个案例 编译器不会在乎代码好不好看&#xff0c;都是正常运行的。但人在乎&#xff0c;差劲的系统很难修改&#xff0c;因为很难找到修改点&#xff0c;导致程序员很有可能犯错&#xff0c;从而引入bug 重构的第一步 得为即将修改的代码建立一组…

自动化测试Selenium【基础篇一】

自动化测试Selenium【基础篇一】&#x1f34e;一.什么是自动化测试&#x1f352;1.1 自动化测试介绍&#x1f352;1.2 单元测试&#x1f352;1.3 接口自动化&#x1f352;1.4 UI自动化&#x1f352;1.5 为什么选择selenium作为我们的web自动化工具?&#x1f352;1.6什么是驱动…

DaVinci:限定器 - RGB

调色页面&#xff1a;限定器Color&#xff1a;Qualifier限定器 - RGB Qualifier - RGB根据像素的三原色通道&#xff08;红、绿、蓝&#xff09;的值来选择画面上的对应区域&#xff0c;从而限制节点调色的范围。限定器 - RGB 根据指定的各个原色通道的色阶范围来选择连续的近似…

Java 对象处理流(ObjectOutputStream\ObjectInputStream)

文章目录前言什么是对象流&#xff1f;基本介绍ObjectOutputStreamObjectInputStream对象处理流的使用细节前言 处理流&#xff1a;是对一个已存在的流进行处理和封装&#xff0c;通过所封装的流的功能调用实现对数据的操作。而处理流中也有不同的分类&#xff0c;此片介绍的是…

C规范编辑笔记(十一)

往期文章&#xff1a; C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) C规范编辑笔记(七) C规范编辑笔记(八) C规范编辑笔记(九) C规则编辑笔记(十) 正文&#xff1a; 因为太久没有更新了&#xff0c;今天就…

Elasticsearch7.8.0版本高级查询—— 多关键字精确查询文档

目录一、初始化文档数据二、多关键字精确查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","…

干货 | 算力网络节点可信度评估和安全管控方案

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;算力网络第二部分&#xff1a;可信度评估一、可信度评估在整个算力网络处理任务的实施流程中&#xff0c;不同部分有不同可信度评估的方法&#xff0c;具体包括&#xff1a;…

忙活了一年的开源社区,终于赶上了春节前的末班车!

随着春节的临近&#xff0c;忙碌了一年的小伙伴们&#xff0c;是不是都已经踏上了回乡的列车&#xff1f;我呢也终于在春节前&#xff0c;完成了 HelloGitHub.com 的重构。HelloGitHub.com 是我在 2017 年的时候用 FlaskjQuery 开发的网站&#xff0c;最初的想法很简单就是为了…

MySQL34道练习题

1、取得每个部门最高薪水的人员名称&#xff08;要求显示部门编号、人员名称和薪资&#xff09; 第一步&#xff1a;查询每个部门的最高薪资 SELECT deptno,max(sal) as maxsal FROM emp GROUP BY deptno; 第二步&#xff1a;把上面查询结果当做临时表t&#xff0…

Pagoda panel宝塔面板

宝塔面板是干什么的&#xff1f;有哪些典型的功能作用?宝塔面板是开发的服务器管理工具&#xff0c;是一家专业从事服务器相关软件和服务研发的公司。宝塔的愿景是让用户更容易使用服务器。宝塔面板是一款服务器管理软件&#xff0c;支持Windows和Linux系统&#xff0c;服务器…

【SpringCloud18】SpringCloud Alibaba Nacos服务注册和配置中心

1.Nacos简介 1.1为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母&#xff0c;最后的s为Service 1.2 是什么 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos:Dynamic Naming and Configuration ServiceNacos就是注册中心 配置中心…

简单双向LSTM模型实战项目

前言 数据来自于kaggle比赛Ventilator Pressure Prediction&#xff0c;数据背景介绍请看官方说明代码来自于当前排名第一的团队Shujun, Kha, Zidmie, Gilles, B&#xff0c;他们在获得第一名的成绩以后发了一篇博客&#xff0c;提供了他们在比赛中使用的模型&#xff0c;包括…

[C/C++]对象指针

对象指针 1.对象指针变量 和基本类型变量一样&#xff0c;对象在初始化之后也会在内存中占有若干字节的内存空间。因此在程序中&#xff0c;我们可以通过对象名或对象的地址来访问该对象。对象指针变量就是一个用于保存对象在内存中存储空间首地址的指针变量&#xff0c;它与普…

Python Matplotlib 中如何用 plt.savefig 存储图片

目录前言正文前言 plt.show()展示图片的时候&#xff0c;截图进行保存&#xff0c;图片不是多么清晰 如何保存高清图也是一知识点 函数包名&#xff1a;import matplotlib.pyplot as plt 正文 主要功能&#xff1a;保存绘制数据后创建的图形。使用此方法可以将创建的图形保…

MobaXterm的安装与使用

安装: 分为开箱即用和逐步配置版本,这里选择开箱即用的版本,网址如下: MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home EditionFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Home Editionhttps://mobaxterm.m…

Java面试题(2),这是一篇会一直更新的博客!欢迎大家留言~

Java面试题第二篇1. 并发的三大特性2、线程池、解释线程池参数3、BeanFactory和ApplicationContext有什么区别&#xff1f;4、描述一下Spring Bean的生命周期5、Spring的几种Bean的作用域6、单例Bean是线程安全的吗&#xff1f;7、Spring框架用到了哪些设计模式8、Spring事务的…