每天学习一个基础算法之选择排序

news2024/9/24 11:23:40
目录

前言:

一、选择排序的基本思路和实现方法

1、基本思路

2、实现方法

二、选择排序的执行过程示意图

三、选择排序的实现代码

选择排序代码主体(以接口函数的形式)

测试部分(主函数调用)

 四、对选择排序复杂度的分析

背景知识:

1、选择排序的时间复杂度

 精确计算:

*采用大O的渐进表示法:

 2、选择排序的空间复杂度

采用大O的渐进表示法:


前言:

本文从概念理解、思路分析、画图举例,代码实现、复杂度分析等多个方面对选择排序进行详细的讲解,包含选择排序的基本思路实现方法执行过程示意图代码,以及对时间和空间复杂度的分析多个方面的知识目录清晰重点标红,部分加粗,方便各位初学者和复习者注意、搜索。

一、选择排序的基本思路和实现方法

1、基本思路

选择排序的基本思路:每次从待排序的数据中选出最小元素,顺序放在之前已经排好序的数据最后,直到全部数据排序完毕。

2、实现方法

实现方式:取第一个数和后面的数逐一比较,然后一轮之后得到最小的数放在第一个,然后开始取第二个,重复之前的比较,直到完成排序为止。

二、选择排序的执行过程示意图

(手工画图不够精美,还请见谅)

橙色部分为已排序区域,白色部分为未排序区域,箭头表示每轮选出的最小值要放置的位置。 

三、选择排序的实现代码

选择排序代码主体(以接口函数的形式)

//选择排序的实现
static void select_sort(int arr[], int sz)
{
    int i = 0;
    for (i = 0; i < sz-1; i++)
    {
        int minIndex = i;//记录最小索引
        int j = 0;
        for (j = i + 1; j < sz; j++)
        {
            if (arr[minIndex] > arr[j])
            {
                minIndex = j;
            }
        }
        int tmp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = tmp;
    }
}

测试部分(主函数调用)

#include <stdio.h>
int main()
{
    int arr[] = { 10,7,4,9,6,1,8,3,2,5 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    select_sort(arr, sz);
    int i = 0;
    //对排序完成的数组进行输出
    for (i = 0; i < sz; i++)
    {
        printf("%d ",arr[i]);
    }
 
}

 四、对选择排序复杂度的分析

背景知识

时间复杂度:表示算法中基本操作(一般表示重复执行的操作)的执行次数,并不需要计算精确的执行次数,而只需要计算大概执行次数。 但我们计算时一般会尽可能先算其精确值,再通过大O的渐进表示法,取对变化趋势影响最大的部分。

空间复杂度:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量,算的是额外创建变量的个数,也使用大O的渐进表示法。

1、选择排序的时间复杂度

 精确计算:

选择排序采用双层嵌套循环,外层循环次数为N-1(N表示要比较的数组的元素个数),内层循环次数N-1-i(i表示当前外层循环的情况

计算起来便是:

(n-1)+(n-2)+(n-3)+……+3+2+1(为一个等差数列)

=1/2*n^2-1/2*n

*采用大O的渐进表示法:

表示为O(N^2) 

 2、选择排序的空间复杂度

采用选择排序算法进行数据排序时,只使用了minIndex这一额外变量来记录最小值,且该变量可以重复使用,不是排序数据大小而影响,始终为常数1.(不同计算标准对“额外”定义不同,但我们一般最终都会使用大O渐进法表示,差异不大,不必硬纠)

采用大O的渐进表示法:

表示为O(1)

每日一学,今天你又超过了百分之九十九的人。

如果本篇文章对你有帮助,请点个关注和赞吧!

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

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

相关文章

系统架构师软考重难点划分及学习要点

目录 引言 综合知识 案例分析 案例分析题型及选择策略 历年案例分析题型及分值分布 学习与应试策略 论文 考试规则 写作要求与技巧 忌讳与注意事项 常见题目与考查方向 引言 系统架构师软考是许多IT从业人员进阶的必经之路。面对这门考试&#xff0c;如何有效划分重难…

社区维修平台

TOC springboot0751社区维修平台 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于社区维修平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管…

Windows系统安装MySQL

下载MySQL 打开网址MySQL :: Download MySQL Community Server点击图下所示位置Download 进入图下所示界面&#xff0c;点击图下所示位置不登录下载 已下载完成 安装MySQL 将下载好的压缩包解压到一个专门的位置&#xff0c;该软件为绿色版软件&#xff0c;解压即可使用 配置…

SSM课程资源库APP—计算机毕业设计源码23834

目 录 摘要 1 绪论 1.1开发的意义 1.2研究现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 课程资源库APP系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5…

如何把多行SQL或多行内容转为一行内容

安装notepad 链接&#xff1a;https://pan.quark.cn/s/b01284447533 提取码&#xff1a;5BEc 行合并 1.选中内容 2. 编辑 --- 行操作 --- 合并行 3.效果

dbeaver数据库工具配置连接openGauss5.X

目录 欢迎阅读dbeaver数据库工具配置连接openGauss5.X教程一、准备工作1、下载openGauss JDBC驱动&#xff1a;2、确保openGauss数据库已运行&#xff1a; 二、在DBeaver中配置驱动1、打开DBeaver&#xff1a;2、进入驱动管理器&#xff1a;3新建驱动&#xff1a;4、添加JDBC驱…

周报(8.12-8.18)

周报(8.12-8.18) 本周工作 DD-Net学习与代码复现 DD-Net网络结构如上图所示。DD-Net也有一个为处理OpenFWI数据的版本&#xff1a;DD-Net70&#xff1a; 与传统DL-FWI不同的是&#xff0c;DD-Net同时拥有两个解码器&#xff0c;第一个解码器的目标是传统的速度模型&#xff0…

科普|企业防泄密措施有哪些?(8种方法详细说明)

企业在日常运营中面临着各种信息泄露的风险&#xff0c;这些风险可能来自内部员工的不当操作或外部黑客的恶意攻击。为了保护企业的核心竞争力和商业机密&#xff0c;采取有效的防泄密措施至关重要。以下是八种常见的企业防泄密措施及其详细说明&#xff1a; 1. 数据分类与加密…

React多功能管理平台项目开发全教程

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-综合应用开发教程:构建多功能管理平台 目录 1.创建项目 2.改造目录结构 3.安装一些必须的模块 3.1 配置预处理器 3.1.1 配置别名@ 3…

第八节:Nodify 编辑器属性

引言 经过前几章的学习&#xff0c;你已经对Nodify框架有了初步的编程思路。当然只局限于这些还完全不够&#xff0c;本章节将阐述各个结构组件的一些常用属性&#xff0c;以便在日后的开发过程中更得心应手。 1、编辑器 平移 简介属性默认值平移功能 控制DisablePanningfals…

了解Swagger规范检查点

目录 检查 Api注解 第一项&#xff1a;是否包含接口的文字描述、接口的类名 检查 ApiOperation注解 第一项&#xff1a;是否包含HTTP请求方法(Get、Post等) 第二项&#xff1a;是否有对方法的简单描述 第三项&#xff1a;是否有对方法的详细描述 检查 ApiResponses注解 …

分享一个基于Python的抖音女装数据分析系统flask毕设女装数据采集系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

[数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;303 标注数量(xml文件个数)&#xff1a;303 标注数量(txt文件个数)&#xff1a;303 标注类别…

Apache SeaTunnel技术架构演进及其在AI领域的应用

随着数据集成需求的增长&#xff0c;Apache SeaTunnel作为新一代的数据同步引擎&#xff0c;不仅在技术架构上不断演进&#xff0c;也在AI领域展现出其独特的应用价值。在CommunityOverCode Asia 2024大会上&#xff0c;Apache SeaTunnel PMC Chair 高俊 深入探讨SeaTunnel的技…

C++核心编程02——引用

摘录于B站黑马程序员提供的笔记。 1. 引用的基本使用 作用&#xff1a; 给变量起别名 语法&#xff1a; 数据类型 &别名 原名 实例&#xff1a; #include <iostream> using namespace std;int main() {// 引用基本语法// 数据类型 &别名 原名int a 10;in…

开放式耳机怎么戴?五大市场热卖爆款推荐!

开放式耳机的佩戴方法通常比较直观&#xff0c;但具体步骤可能因不同品牌和型号的设计而异。以下是一般的佩戴步骤&#xff1a; 1. 调整耳机&#xff1a;大多数开放式耳机都有可调节的耳挂&#xff0c;首先调整耳挂&#xff0c;确保它能够舒适地适应你的耳朵形状。 2. 定位耳…

FGF20:多些研究关注

成纤维细胞生长因子20&#xff08;FGF20&#xff09;是FGF9亚家族成员&#xff0c;作为调节中枢神经发育和功能的神经营养因子。 &#xff08;数据来源AlphaFold&#xff09; FGF20由208个氨基酸组成&#xff0c;属于分泌型胞外蛋白&#xff0c;无信号肽区段&#xff0c;功能域…

独辟蹊径:找工作时的创新思维——之找到一份工作

一、背景 在日常生活中我们会遇到一些开发者抱怨“资深开发者牢牢占据着岗位&#xff0c;让年轻开发者鲜有工作机会”。与此同时&#xff0c;也有一些开发者抱怨说&#xff1a;没有人愿意招聘上了点年纪的开发者&#xff0c;每个人都在歧视大龄开发者。还有一些人抱怨他们的技…

【网络安全】服务基础阶段——第一节:Windows系统管理基础----进制转换与IP地址

一、进制转换与IP地址 进制与计算&#xff1a; 进制转换是指将一个数字从一个数制&#xff08;基数&#xff09;转换为另一个数制的过程 二进制&#xff08;Binary&#xff09;&#xff1a;基于0和1的数制&#xff0c;例如1011&#xff08;十进制11&#xff09;。八进制&…

网站分类目录提交技巧有哪些

在提交网站到分类目录时&#xff0c;掌握一定的技巧可以显著提升通过率和效果。以下是一些关键的提交技巧&#xff1a; 选择高质量的分类目录&#xff1a; 确保选择的分类目录有足够的流量和权重&#xff0c;这样提交的内容才能得到有效的展示。 考察分类目录的正规性和可信度&…