选择排序!!!基础排序详解 C语言版

目录

1.什么是选择排序

2.选择排序源代码

3.优化代码


1.什么是选择排序

这是一个选择排序的流程图,其实很简单,就是每次挑选数字中最小的作为第一个 ,直到整个数据有序就结束了

顾名思义,选择,那就是选取,选取其中最小的,放在最前面的位置,已经选好的位子,下一次就不加入选择了。

每一次安排一个位置,直到所有位置都安排了。

2.选择排序源代码

void Swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
// initial verse
void My_SelctSort(int* arr,int sz)
{int mini = 0;for (int i = 0; i < sz; i++){int mini = i;for (int j = i; j < sz; j++){if (arr[mini] > arr[j]){mini = j;}}Swap(&arr[mini], &arr[i]);}
}

swap函数就是自写的交换数据的函数。变量必须是指针!!!

 关于转换我和大家说一遍流程,看向上面的流程图。刚开始我们的数组是25314.

第一次循环 我们的 mini 就是 i = 0,就说明我们现在最小的元素要放在 数组中 0 这个位置。

第一个for循环用来遍历数组中的每一个位置都要排序。

进入第二个for 循环,用来循环原来从 i 这个位置开始的数组,找到其中最小的一个元素,把这时候的 最小元素的位置记录下来保存在mini中。

最后在交换mini 位置 和 i 位置(还没被安排过的位置)的元素即可

3.优化代码

void My_SelctSortoptimize(int* arr, int sz)
{int begin = 0;int end = sz - 1;while (begin < end){int maxi = begin;int mini = begin;for (int i = begin; i <= end; i++){if (arr[i] > arr[maxi]){maxi = i;}if (arr[i] < arr[mini]){mini = i;}}Swap(&arr[mini], &arr[begin]);if (maxi == begin){maxi = mini;}Swap(&arr[maxi], &arr[end]);end--;begin++;}
}

优化代码和普通版本的代码的区别就是,优化代码一次要判定两个元素,最大和最小的元素。并且还有一个易错点。

总体思路和上述一样,为什么第一个循环不用for循环了呢?

因为一次找两个元素,相当于减少了外层循环的一半,有点类似二分查找,begin和end相遇时停止循环。用for循环没有while循环清晰明了。

刚刚说还有一个易错点,那就是当你的 maxi 位置和 begin位置重合的时候,这时候如果把最小的交换过去,那maxi 这个位置的元素就变成最小的了。(如下图),这时候就要判断是否max 和 b 重合,如果重合,再 mini 和 b 位置的元素交换了以后,要把 maxi 变成 mini ,因为交换了以后 mini 下存的才是最大的元素。

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

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

相关文章

打造私域流量的知识付费小程序saas租户平台

当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;明理信息科技提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1a;…

Visual Studio Code可以做到这一点:提示和技巧:Build 2018

Visual Studio Code火了。每个人都喜欢这个意想不到的文本编辑器&#xff0c;而且理由很充分&#xff1a;它可以做很多事情。它可以动态编译JavaScript模板&#xff0c;内联执行JavaScript&#xff0c;管理Mongo DB实例等等&#xff01;在这个部分&#xff0c;我们将看到Visual…

数据结构OJ实验15-插入排序与交换排序

A. DS内排—直插排序 题目描述 给定一组数据&#xff0c;使用直插排序完成数据的升序排序。 --程序要求-- 若使用C只能include一个头文件iostream&#xff1b;若使用C语言只能include一个头文件stdio 程序中若include多过一个头文件&#xff0c;不看代码&#xff0c;作0分…

ubuntu 安装 anaconda

ubuntu 安装 anaconda 下载 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh安装 bash Anaconda3-2023.09-0-Linux-x86_64.sh2.1 回车继续 2.2 许可协议 输入 q 退出阅读许可协议 2.3 输入 yes 接受 许可协议 2.4 设置 anaconda 安装位置 如不需…

聚观早报 |谷歌起草“机器人宪法”;极越与福耀集团达成合作

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月6日消息 谷歌起草“机器人宪法” 极越与福耀集团达成合作 三星电子宣布与现代汽车集团合作 OpenAI下周将推GP…

18款Visual Studio实用插件(更新)

前言 俗话说的好工欲善其事必先利其器&#xff0c;安装一些Visual Studio实用插件对自己日常的开发和工作效率能够大大的提升&#xff0c;避免996从选一款好的IDE实用插件开始。以下是我认为比较实用的Visual Studio插件希望对大家有用&#xff0c;大家有更好的插件推荐可在文…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所&#xff0c;主要道路车辆违停等违规行为会对园区的安全造成隐患&#xff0c;并且在上下班高峰期内&#xff0c;由于发现不及时&#xff0c;车辆违停行为会造成出入口拥堵现象&#xff0c;这也成为园区管理的棘手问题。为了…

“编程界的隐形斗篷:C语言作用域与生命周期的喜怒哀乐”

少年们&#xff0c;大家好。我是博主那一脸阳光。 前言&#xff1a;理解C语言作用域与生命周期&#xff0c;犹如掌握了变量在程序中的“活动地带”与“存活时刻”&#xff0c;有助于避免数据冲突、优化内存使用、提升代码质量和模块化程度&#xff0c;增强程序稳定性和安全性…

php-ffmpeg运用 合并视频,转码视频

下载 官网 windows 版本 添加环境变量 合并视频 public function test_that_true_is_true(): void{ini_set(memory_limit,-1); //没有内存限制set_time_limit(0);//不限制执行时间//ffmpeg配置$path [ffmpeg.binaries > D:\soft\ffmpeg\bin/ffmpeg.exe,ffprobe.binaries…

AlarmManager使用详解

AlarmManager使用详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入探讨在Android开发中常用的时间调度工具——AlarmManager的使…

使用ChatGPT midjourney 等AI智能工具,能为视觉营销做些什么?

使用ChatGPT、Midjourney等AI智能工具&#xff0c;可以极大地提升视觉营销的效率和创意水平。以下是这些工具在视觉营销中的一些具体应用&#xff1a; 内容创作与文案撰写&#xff08;ChatGPT&#xff09; 广告文案生成&#xff1a;根据产品特点和目标受众&#xff0c;生成吸…

[C#]winform部署PaddleDetection的yolo印章检测模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleDetection.git 【算法介绍】 PaddleDetection 是一个基于 PaddlePaddle&#xff08;飞桨&#xff09;深度学习框架的开源目标检测工具库。它提供了一系列先进的目标检测算法&#xff0c;包括但不限于 Faster R-CNN, …

transforms图像增强(一)

一、数据增强 数据增强&#xff08;Data Augmentation&#xff09;是一种常用的数据预处理技术&#xff0c;通过对训练集进行各种变换和扩增操作&#xff0c;可以增加训练数据的多样性和丰富性&#xff0c;从而提高模型的泛化能力。 数据增强的目的是通过对训练集中的图像进行…

听GPT 讲Rust源代码--compiler(22)

File: rust/compiler/rustc_target/src/spec/x86_64_unknown_netbsd.rs rust/compiler/rustc_target/src/spec/x86_64_unknown_netbsd.rs 文件是 Rust 编译器针对 x86_64-unknown-netbsd 目标平台的配置文件。该文件定义了与该平台相关的特性、链接选项、目标特定的运行时支持以…

3种在JavaScript中终止forEach循环的方式

一、序言 这个问题估计会难倒一部分同学。甚至会有人反问&#xff0c;forEach循环在JavaScript中能终止吗&#xff1f; 比如 &#xff0c;我举个例子 const array [ -3, -2, -1, 0, 1, 2, 3 ] array.forEach((it) > { if (it > 0) { console.log(it) // 0 1 2 3 retur…

Java Spring boot 可變參數,以及弊端

function中 不固定的參數 public boolean sendEmail(String manFrom, String manTo,String manCc, String subject, String... msg); 必須是最後一個參數&#xff0c;傳值時可以多個。 sendEmail(“a.gmail”,"b.gmail","c.gmail","subject",…

Spring Boot应用程序中VO的理解及使用

在Spring Boot应用程序中&#xff0c;VO&#xff08;View Object&#xff09;通常用于表示视图层所需的数据&#xff0c;这些数据来自于业务逻辑层或数据访问层。VO的主要目的是将业务逻辑层的数据结构转换为视图层可以使用的数据结构&#xff0c;使得视图层可以直接使用VO中的…

spring security authorization server 定制令牌和用户信息

版本 1.2.1 定制方法 默认用户信息Mapper只针对用户ID&#xff0c;电子邮件&#xff0c;电话&#xff0c;个人档案等字段进行处理&#xff0c;如需在用户信息端点返回自定义的字段可通过以下方法定制Mapper Bean public OAuth2TokenCustomizer<JwtEncodingContext> j…

docker kingbase

docker kingbase run 命令 docker run -tid \ -e ENABLE_CIyes \ -e NEED_STARTyes \ -e DB_MODEoracle \ -e DB_USERkingbase \ -e DB_PASSWORD123456 \ --privileged \ -p 4321:54321 \ -v /home/admin/SoftWare/volume/kingbase/userdata/data:/home/kingbase/userdata/da…

【唐山海德教育】成人高校的毕业证书有何用途?

答&#xff1a;成人高等教育毕业生在干部聘用、职称评审、工资待遇等方面与普通高等教育同层次毕业生同等对待。本科毕业可申请学士学位&#xff0c;与其它国家承认的大学专&#xff08;本&#xff09;毕业证书具有同等效力&#xff0c;含金量一样&#xff0c;在使用上也是相同…