这个 选择排序详解过程 我能吹一辈子!!!

news2024/11/24 7:32:55

文章目录

  • 选择排序概念
  • 选择排序算法思路
  • 选择排序代码实现
  • 选择排序优化

选择排序概念

选择排序:即每次选择第一个数为最小或者最大与之后的元素进行比较,循环都能找到一个最大或者最小放到序列的两端。

选择排序算法思路

选择排序是一种简单直观的排序算法。
它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置直到未排序元素个数为0。

选择排序的步骤:
1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
2>再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。
3>重复第二步,直到所有元素均排序完毕。

在这里插入图片描述

选择排序代码实现

代码示例:

//选择排序(一次选一个数)
void SelectSort(int* a, int n)
{
	int i = 0;
	for (i = 0; i < n; i++)//i代表参与该趟选择排序的第一个元素的下标
	{
		int start = i;
		int min = start;//记录最小元素的下标
		while (start < n)
		{
			if (a[start] < a[min])
				min = start;//最小值的下标更新
			start++;
		}
		Swap(&a[i], &a[min]);//最小值与参与该趟选择排序的第一个元素交换位置
	}
}

时间复杂度:O(N^2)
空间复杂度:O(1)

选择排序优化

选择排序的优化思路一般是在一趟遍历中,同时找出最大值与最小值,放到数组两端,这样就能将遍历的趟数减少一半。

代码示例:

//选择排序(一次选两个数)
void SelectSort(int* a, int n)
{
	int left = 0;//记录参与该趟选择排序的第一个元素的下标
	int right = n - 1;//记录参与该趟选择排序的最后一个元素的下标
	while (left < right)
	{
		int minIndex = left;//记录最小元素的下标
		int maxIndex = left;//记录最大元素的下标
		int i = 0;
		//找出最大值及最小值的下标
		for (i = left; i <= right; i++)
		{
			if (a[i] < a[minIndex])
				minIndex = i;
			if (a[i]>a[maxIndex])
				maxIndex = i;
		}
		//将最大值和最小值放在序列开头和末尾
		Swap(&a[minIndex], &a[left]);
		if (left == maxIndex)
		{
			maxIndex = minIndex;//防止最大值位于序列开头,被最小值交换
		}
		Swap(&a[maxIndex], &a[right]);
		left++;
		right--;
	}
}

时间复杂度:O(N^2)
空间复杂度:O(1)

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

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

相关文章

chatgpt赋能python:Python操作表格的全面指南

Python操作表格的全面指南 表格是一种非常实用的数据展示方式&#xff0c;程序员在处理数据以及展示数据时也经常使用表格。Python提供了多个强大的库操作表格&#xff0c;本文将为你介绍一些常见的Python操作表格的方式——包括读取、写入、处理和操作。 读取表格 Python提…

文献阅读-A Survey on Transfer Learning 和 A Survey on Deep Transfer Learning

论文&#xff1a; A Survey on Transfer Learning 期刊会议&#xff1a;IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING 时间&#xff1a;2010 级别&#xff1a;CCF A 论文&#xff1a; A Survey on Deep Transfer Learning 期刊会议&#xff1a;International Confere…

LRU 该用什么数据结构

LRU&#xff08;最近最少使用&#xff09;&#xff0c;是一种缓存置换算法。缓存是用来存储常用的数据&#xff0c;加速常用数据访问的数据结构。有软件实现&#xff0c;比如数据库的缓存&#xff1b;也有硬件实现&#xff0c;比如我们上一讲学的 TLB。缓存设计中有一个重要的环…

chatgpt赋能Python-python_怎么赋值

介绍 Python是一种高级编程语言&#xff0c;它的强大之处在于它的简洁性和易读性。由于其简单易学&#xff0c;灵活性和可移植性&#xff0c;Python在Web开发、自动化测试和数据分析等领域得到了广泛的应用。在Python中&#xff0c;赋值是一项基本的操作&#xff0c;这篇文章将…

【第八期】Apache DolphinScheduler 每周 FAQ 集锦

点击蓝字 关注我们 摘要 为了让 Apache DolphinScheduler 的广大用户和爱好者对于此项目的疑问得到及时快速的解答&#xff0c;社区特发起此次【每周 FAQ】栏目&#xff0c;希望可以解决大家的实际问题。 关于本栏目的要点&#xff1a; 本栏目每周将通过腾讯文档&#xff08;每…

初识Monorepo

引言 在如今快节奏的前端开发中&#xff0c;管理多个项目和组件的复杂性成为了开发团队的挑战&#xff0c;Monorepo&#xff08;单一代码仓库&#xff09;作为一种新兴的解决方案&#xff0c;正在成为开发团队的新宠。 Monorepo简介 是什么 Monorepo 是一种软件开发的策略模式…

21 VueComponent 事件的处理

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 测试用例如下, 一个简单的 按钮事件的触发 问题的调试 调用…

理解 Linux 文件权限

章节目录&#xff1a; 一、Linux 的安全性1.1 /etc/passwd 文件1.2 /etc/shadow 文件1.3 添加新用户1.4 删除用户1.5 修改用户 二、使用 Linux 组2.1 /etc/group 文件2.2 创建新组2.3 修改组 三、理解文件权限3.1 使用文件权限符号3.2 默认文件权限 四、更改安全设置4.1 修改权…

chatgpt赋能python:Python如何捕捉窗口?——一位有10年Python编程经验的工程师谈Windows操作系统编程

Python 如何捕捉窗口&#xff1f;——一位有10年Python编程经验的工程师谈Windows操作系统编程 自从计算机出现以来&#xff0c;人们就开始与操作系统打交道。而对于Windows系统而言&#xff0c;捕捉窗口通常需要在应用程序级别完成。但是&#xff0c;使用Python与Windows编程…

新手须知的pr入门知识,小红书媒介话术分享

我们都知道&#xff0c;这是一个内容为王的时代。在众多的平台上&#xff0c;都存着无数优秀的内容产出者&#xff0c;也就是达人。今天对新手须知的pr入门知识&#xff0c;小红书媒介话术分享。 一、什么是pr PR即Public Relations的简称&#xff0c;翻译过来就是公关的意思 。…

惠普HP4294A(110M) 安捷伦agilent 4294a精密阻抗分析仪

HP/Agilent 4294A 精密阻抗分析仪是一种集成解决方案&#xff0c;可对元件和电路进行有效的阻抗测量和分析。HP/Agilent 4294A 覆盖更宽的测试频率范围&#xff08;40 Hz 至 110 MHz&#xff09;&#xff0c;基本阻抗精度为 /-0.08%。出色的高 Q/低 D 精度可实现低损耗组件的分…

恭喜,拿到华为OD offer了,并分享刷题经验

目录 一、先介绍一下华为OD是个什么鬼&#xff1f;1、华为OD背景2、华为OD现状3、华为OD趋势4、华为OD介绍&#xff08;1&#xff09;人力外包&#xff08;2&#xff09;员工关系&#xff08;3&#xff09;工作关系&#xff08;4&#xff09;薪酬福利&#xff08;5&#xff09;…

Window MinGW 编译 OpenCV 人快疯了看这里!

目录 一、使用官方编译好的 二、使用MinGW编译器自行进行编译 三、编译好的OpenCV库 OpenCV3.4.5 OpenCV 4.5.4 一、使用官方编译好的 【Qt】opencv源码&官方编译好的opencv在windows下使用的区别_外来务工人员徐某的博客-CSDN博客 官方替我们编译好了&#xff0c;可以直…

一篇文章带你了解Netty

Netty 传统的IO模型的web容器&#xff0c;比如老版本的Tomcat&#xff0c;为了增加系统的吞吐量&#xff0c;需要不断增加系统核心线程数量&#xff0c;或者通过水平扩展服务器数量&#xff0c;来增加系统处理请求的能力。有了NIO之后&#xff0c;一个线程即可处理多个连接事件…

DNSPod十问崔久强:证书有效期缩短,CA机构要凉透?

本期嘉宾 崔久强 上海CA中心总经理 崔久强&#xff0c;上海市数字证书认证中心有限公司总经理、上海市静安区政协委员、第一届上海市智慧城市建设领军先锋、一带一路信息产业发展联盟数字签名专委会主任委员、中国电子认证产业联盟专委会委员、中国密码学会电子认证专委会理事…

【P35】JMeter 包含控制器(Include Controller)

文章目录 一、包含控制器&#xff08;Include Controller&#xff09;参数说明二、准备工作三、测试计划设计3.1、保存测试片段3.2、使用测试片段 一、包含控制器&#xff08;Include Controller&#xff09;参数说明 可以将测试计划的某一部分提取为公用逻辑&#xff0c;这样…

Goby 漏洞更新 |中保無限Modem Configuration Interface 默认口令漏洞

漏洞名称&#xff1a;中保無限Modem Configuration Interface 默认口令漏洞 English Name&#xff1a;Gemtek Modem Configuration Interface Default password vulnerability CVSS core: 5.0 影响资产数&#xff1a;4521 漏洞描述&#xff1a; Modem Configuration Inter…

chatgpt赋能python:Python操作网页的SEO

Python操作网页的SEO 在当今的数字时代&#xff0c;许多企业专注于提高其网站的排名。在这种竞争激烈的环境中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是必不可少的。虽然有许多方法可以提高网站的排名&#xff0c;但其中一个最重要的是使用Python来操作网页。 …

Git进阶·GitFlow·壹

文章目录 1 Git进阶——GitFlow工作流程1.1 master与develop分支1.1.1 master1.1.2 develop 1.2 feature分支1.3 Release分支1.4 hotfix分支1.5 GitFlow示例1.5.1 在master上新建dev分支1.5.2 基于dev创建feature分支1.5.3 feature分支上开发业务代码1.5.4 将feature合并到dev1…

Linux的进程信号(上)

文章目录 1. 信号入门2. 技术应用角度的信号3. 信号概念4. 信号处理常见方式5. 产生信号5.1 通过终端按键产生信号5.2 调用系统函数向进程发信号5.3 由软件条件产生信号5.4 硬件异常产生信号 6. Core Dump 1. 信号入门 在生活中&#xff0c;比如红绿灯&#xff0c;铃声这些&am…