排序方法——《选择排序》

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。
P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。

  

在这里插入图片描述

                                           博主主页:Yan. yan.
                                              C语言专栏
                                            数据结构专栏
                                         力扣牛客经典题目专栏


文章目录

  • 1、选择排序的基本思想
  • 2、选择排序的原理
  • 3、选择排序的实现

1、选择排序的基本思想


  选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

2、选择排序的原理

  选择排序的基本原理如下:

  • 将数组中arr[0] ~ arr[n-1]的元素中找出最大或最小的数
  • 将找的的数放到数组的第一个位置或最后一个位置上
  • 剩余的元素重复上述步骤,直到数组元素完全有序

在这里插入图片描述

  像图中所示,一直重复循环,直到数组有序

3、选择排序的实现

  选择排序的实现有两种:

  • 只找大,或只找小
void Swap(int* a, int* b)
{int ret = *a;*a = *b;*b = ret;
}void SelectSort(int* arr, int n)
{for (int j = 0; j < n; j++){int begin = 0;for (int i = 1; i < n; i++){int min = begin;while (arr[i] < arr[min]){min = i;}Swap(&arr[begin], &arr[min]);begin++;}}
}
  • 一起找大和小,定义begin和end,最小的和begin交换,最大的和end交换
void Swap(int* a, int* b)
{int ret = *a;*a = *b;*b = ret;
}
void SelectSort(int* arr, int n)
{int begin = 0;int end = n - 1;while (begin < end){int min = begin;int max = begin;for (int i = begin + 1; i <= end; i++){while (arr[i] < arr[min]){min = i;}while (arr[i] > arr[max]){max = i;}}Swap(&arr[begin], &arr[min]);if (begin == max){max = min;}Swap(&arr[end], &arr[max]);begin++;end--;}
}

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

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

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

相关文章

关于文件上传失败问题的排查思路

问题场景&#xff1a; 最近公司的app有很多用户反馈上传文件失败了。业务路径就是简单的app前端调用后端文件上传接口&#xff0c;所以发生上传失败的可能因素可能是&#xff1a;1、文件大小/文件类型等是否有问题&#xff0c;公司用的是七牛的文件服务器&#xff0c;对文件上…

我成功创建了一个Electron应用程序

1.创建electron项目命令&#xff1a; npm create quick-start/electron electron-memo 2选择&#xff1a;√ Select a framework: vue √ Add TypeScript? ... No √ Add Electron updater plugin? ... Yes √ Enable Electron download mirror proxy? ... Yes 3.命令&am…

保护关键业务资产的四个步骤

提到 “关键资产 ”&#xff0c;相信大家并不陌生&#xff0c;它是企业 IT 基础设施中对组织运作至关重要的技术资产。如果这些资产&#xff08;如应用服务器、数据库或特权身份&#xff09;出现问题&#xff0c;势必会对企业安全态势造成严重影响。 但每项技术资产都被视为关…

IT项目常用考核指标

在IT项目管理中&#xff0c;考核指标是用来评估项目进展和成果的重要依据。以下是一些常用的IT项目考核指标&#xff0c;包括具体的指标名称、计算公式、基准达标值以及常见问题&#xff1a; 1 项目进度准时率 项目的生命线是什么&#xff1f;没错&#xff0c;是时间&#xf…

【UML用户指南】-01-UML基本元素的介绍(一)

目录 1、UML的词汇表 2、UML的4种事物 2.1、结构事物 1&#xff09;类 2&#xff09;接口 3&#xff09;协作 4&#xff09;用例&#xff08;use case&#xff09; 5&#xff09;主动类&#xff08;active class&#xff09; 6&#xff09;构件&#xff08;component&a…

揭秘c语言储存类别

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文将整理c语言的储存类型的知识点 储存类型概念 描述:用于解决内存开辟与解放的时间的问题。跟作用域没啥关系。 但是呢&#xff0c;他也是能影响到程序的运行的&#xff0c;所以是很关键的。 类型: auto :自…

拉取代码编辑器中报错`Delete ␍ prettier/prettier` 问题的解决方案

当您在使用 git clone 下载Web前端代码仓库后&#xff0c;可能会遇到 Delete ␍ prettier/prettier 的提示时&#xff0c;这通常意味着您的代码中存在不兼容的换行符问题。 问题产生的原因 在不同的操作系统中&#xff0c;文本文件的换行符是不同的。Windows系统通常使用回车…

Pytorch常用函数用法归纳:Tensor张量之间的计算

1.torch.add() (1)函数原型: torch.add(input, other, alpha, out) (2)参数说明: 参数名称参数类型参数说明inputtorch.Tensor表示参与运算的第一个输入Tensor张量othertorch.Tensor或者Number表示参与运算的第二个输入Tensor张量或标量alphaNumber, optional一个可选的缩放…

idea mac快捷键

Mac快捷键 快捷键 说明 ⌘ F 在当前窗口查找 ⌘ ⇧ F 在全工程查找 ⌘ ⇧ ⌥ N 查找类中的方法或变量 F3 / ⇧ F3 移动到搜索结果的下/上一匹配处 ⌘ R 在当前窗口替换 ⌘ ⇧ R 在全工程替换 ⌘ ⇧ V 可以将最近使用的剪贴板内容选择插入到文本 ⌥…

负压实验室设计建设方案

随着全球公共卫生事件的频发&#xff0c;负压实验室的设计和建设在医疗机构中的重要性日益凸显。负压实验室&#xff0c;特别是负压隔离病房&#xff0c;主要用于控制传染性疾病的扩散&#xff0c;保护医护人员和周围环境的安全。广州实验室装修公司中壹联凭借丰富的实验室装修…

MQTT.FX的使用

背景 在如今物联网的时代下&#xff0c;诞生了许多的物联网产品&#xff0c;这些产品通过BLE、WIFI、4G等各种各样的通信方式讲数据传输到各种各样的平台。 除了各个公司私有的云平台外&#xff0c;更多的初学者会接触到腾讯云、阿里云之类的平台。设备接入方式也有着多种多样…

神经网络应用场景——图像识别

神经网络在图像识别中的应用是一项重要且广泛的技术&#xff0c;下面将详细解释和说明神经网络在图像识别中的定义、特点以及应用场景。 一、定义 神经网络在图像识别中的应用&#xff0c;主要是指利用神经网络模型对图像进行特征提取和分类&#xff0c;从而实现对图像中物体…

Spring自带定时任务@Scheduled注解

文章目录 1. cron表达式生成器2. 简单定时任务代码示例&#xff1a;每隔两秒打印一次字符3. Scheduled注解的参数3.1 cron3.2 fixedDelay3.3 fixedRate3.4 initialDelay3.5 fixedDelayString、fixedRateString、initialDelayString等是String类型&#xff0c;支持占位符3.6 tim…

2004NOIP普及组真题 4. 火星人

线上OJ&#xff1a; 【04NOIP普及组】火星人 核心思想&#xff1a; 本题的难点是阅读理解。通读后发现&#xff0c;题目的本质是全排列&#xff0c;加上的数字 m &#xff0c;起始就是调用 m 次 next_permutation() 。 题解代码&#xff1a; #include <bits/stdc.h> u…

C++部分关键字的作用-__declspec(dllexport)、__declspec(dllimport)、__attribute__、__cdecl

__declspec(dllexport)和__declspec(dllimport) 这个关键字主要用于Windows平台上的DLL编程。当你在一个DLL中定义一个函数或变量&#xff0c;并希望它能够被其他应用程序导入和使用时&#xff0c;你可以使用__declspec(dllexport)来标记这个函数或变量&#xff0c;这样编译器…

C语言从头学16——数据类型(二)

继续学习数据类型。 3、浮点型数float 有小数点的数值称为浮点数。浮点数用 float 进行声明。 float 类型占用4个字节&#xff08;32位&#xff09;&#xff0c;float 类型表示十进制数时至少能够提供6位有效数字&#xff0c;例如&#xff1a; float x 1020.25; …

程序员应该有什么职业素养?【模板】

程序员应该有什么职业素养&#xff1f; 简介&#xff1a;你认为对于程序员而言&#xff0c;什么职业素养是最为重要的呢&#xff1f;在你的职业生涯中&#xff0c;有什么切实的案例发生吗&#xff1f;让我们探讨程序员在职业生涯中应具备的职业素养&#xff0c;讲述你在工作中…

GD32F407ZGT6/GD32F450ZGT6(3)外部中断实验

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布&#xff1a; https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

商品详情接口在独立站的应用及接口请求示例

商品详情接口在独立站的应用主要体现在以下几个方面&#xff0c;这些应用不仅提升了独立站的运营效率&#xff0c;也优化了用户体验&#xff1a; 商品信息查询与展示&#xff1a; 商品详情接口允许独立站通过商品ID或关键词快速查询商品详细信息&#xff0c;包括价格、库存、…

用幻灯片讲解C++手动内存管理

用幻灯片讲解C手动内存管理 1.栈内存的基本元素 2.栈内存的聚合对象 3.手动分配内存和释放内存 注意&#xff1a;手动分配内存&#xff0c;指的是在堆内存中。 除非实现自己的数据结构&#xff0c;否则永远不要手动分配内存! 即使这样&#xff0c;您也应该通过std::allocator…