当前位置: 首页 > news >正文

【排序算法】C语言实现选择排序与冒泡排序

请添加图片描述

文章目录

  • 🚀前言
  • 🚀冒泡排序
    • ✈️冒泡排序的逻辑
    • ✈️冒泡排序coding
  • 🚀选择排序
    • ✈️选择排序的逻辑
    • ✈️选择排序coding

🚀前言

这里是阿辉算法与数据结构专栏的第一篇文章,咱们就从排序算法开始讲起,排序算法有很多大致分为两类:基于比较的排序和非比较的排序

  • 基于比较的排序:冒泡、选择、插入、希尔、堆、归并、随机快排
  • 非比较的排序:桶排序

以上的排序算法阿辉都会讲到,今天阿辉主要讲一下选择排序和冒泡排序。
铁子们,进入咱们今天的学习吧!!!

🚀冒泡排序

铁子们对于冒泡排序一定是有很多理解了,这里阿辉就简单讲一下😆

✈️冒泡排序的逻辑

逻辑很简单,就是前一个数据与后一个数据进行比较,前一个数据更大就交换,相等或小于不进行任何操作,然后重复操作,一趟下来就能把最大的数据放到末尾位置然后重复上述操作如下图👇
请添加图片描述

可以看出,对于上面具有5个元素的无序数组,我们通过4趟的冒泡后就将其变为有序数组,每一趟冒泡后都可以使剩下的数据中最大的数据沉底

我们看一下动图演示:
请添加图片描述

✈️冒泡排序coding

其实很多情况下我们对于逻辑掌握的很快,关键是把逻辑抽象成代码的过程很麻烦,各种边界要考虑到位,对于一个算法首先要把具体例子搞明白再去写,否则很容易脑子一摊浆糊

关于冒泡排序,其实我们就关注两件事
1.需要几趟冒泡
对于一个有n个元素的数组,我们需要 n-1 趟冒泡
很好理解,比如:3 2 1这三个数
一趟冒泡会把3移到末尾变成 2 1 3
第二趟就会把2移到3的前一位变成 1 2 3这时数组已经有序了
2.一趟冒泡进行几次比较
对于有n个元素的数组来说:
第一次冒泡,范围是下标0 ~ n-1,就比较n-1次
第二次冒泡,范围是下标0 ~ n-2,就比较n-2次
第三次冒泡,范围是下标0 ~ n-3,就比较n-3次… … … …

有了上面的分析,我们很容易想到可以用一个循环控制趟数,再用一个循环控制比较的次数就可以写出下面经典的冒泡排序

//交换方法
void swap(int a[], int x, int y)
{int tmp = a[x];a[x] = a[y];a[y] = tmp;
}
//经典冒泡排序
void BubbleSort(int a[], int sz)//sz表示传入数组的大小
{//end表示需要进行几趟冒泡for (int end = sz - 1; end > 0;end--){//同时end从sz-1开始,作为比较次数限定第二个for循环的范围//每一趟冒泡都是从下标 0和1  1和2  2和3 ……比较//second代表每次比较的第二个数,也就是0和1的1,1和2的2//所以second从1开始for (int second = 1; second <= end; second++){//当第一个数大于第二个数就交换if (a[second - 1] > a[second]){//交换函数,传入数组名和需要交换的两个数的下标swap(a, second, second - 1);}}}
}

为什么说上述是经典的冒泡排序,因为他有一个缺陷对于长度一样的数组不管其是否有序都会进行固定次数的比较,这样的话效率很差,所以就有冒泡排序的改良版

void BubbleSort(int a[], int sz)
{for (int end = sz - 1; end > 0;end--){int flag = 0;//增加一个flag变量,判断是否数组已有序for (int second = 1; second <= end; second++){if (a[second - 1] > a[second]){swap(a, second, second - 1);flag = 1;}}//flag为0说明没进行交换,没交换就说明每个数的前一个数不大于它//说明数组已有序跳出循环if (flag == 0)break;}
}

🚀选择排序

选择排序也不难,阿辉来给铁子们稍微讲一下😆

✈️选择排序的逻辑

逻辑就是:对于一个有n个元素的数组,首先在下标为0 ~ n-1的范围内找到最小的数与下标为0的数交换,染后在下标1 ~ n-1范围找到最小的数与下标为1的数字交换,然后按照上述依次进行,直到排好序
选择过程:
请添加图片描述

我们来看一下动图展示:
请添加图片描述

✈️选择排序coding

同样选择排序我们也只关心两件事
1.进行几次找最小值
这与冒泡类似,一个有n个元素的数组进行,n-1次选择
2.每次寻找最小值的范围
对于有n个元素的数组来说:
对于有n个元素的数组来说:
第一次选择,范围是下标0 ~ n-1
第二次选择,范围是下标1 ~ n-1
第三次选择,范围是下标2 ~ n-1
…………

有了上面的分析,我们很容易想到可以用一个循环控制找最小值的次数,再用一个循环遍历要找的最小值的范围

//交换方法
void swap(int a[], int x, int y)
{int tmp = a[x];a[x] = a[y];a[y] = tmp;
}
//选择排序
void SelectSort(int a[],int sz)//sz数组元素个数
{int first = 0;//控制找最小值,并且是每一次要找最小值的范围的第一个元素的下标for (first = 0; first < sz - 1; first++){int end = sz - 1;//控制遍历最小值的范围,并且从后遍历数组int min = first;//min记录最小值的下标while(end > first){//如果以end为下标的元素比以min为下标的元素小,min就记录该数的下标min = a[min] > a[end] ? end : min;end--;}swap(a, first, min);//每次找到的最小数与开始位置交换}
}

以上GIF动图均出自这篇文章
如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主,如有不足还请指点,博主及时改正,感谢大家支持!!!
请添加图片描述

相关文章:

【排序算法】C语言实现选择排序与冒泡排序

文章目录 &#x1f680;前言&#x1f680;冒泡排序✈️冒泡排序的逻辑✈️冒泡排序coding &#x1f680;选择排序✈️选择排序的逻辑✈️选择排序coding &#x1f680;前言 这里是阿辉算法与数据结构专栏的第一篇文章&#xff0c;咱们就从排序算法开始讲起&#xff0c;排序算法…...

设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景

文章目录 一、什么是原型模式二、使用场景三、代码示例 一、什么是原型模式 原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新的对象&#xff0c;而无需通过调用构造函数来创建。原型模式通过克隆操作来创建对象&#xff0c;提供了一种更加灵活和高效…...

数据结构之进阶二叉树(二叉搜索树和AVL树、红黑树的实现)超详细解析,附实操图和搜索二叉树的实现过程图

绪论​ “生命有如铁砧&#xff0c;愈被敲打&#xff0c;愈能发出火花。——伽利略”&#xff1b;本章主要是数据结构 二叉树的进阶知识&#xff0c;若之前没学过二叉树建议看看这篇文章一篇掌握二叉树&#xff0c;本章的知识从浅到深的对搜索二叉树的使用进行了介绍和对其底层…...

SpringIOC之LocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…...

前端案例—antdDesign的Select多选框组件加上全选功能

前端案例—antdDesign的Select多选框组件加上全选功能。 实现效果如下&#xff1a; Select 组件里有这个属性&#xff0c;可以利用这个对下拉菜单进行自定义。 const handleChange (e, value) > {setSelectState(e.target.checked)let arr productOptions?productOption…...

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘&#xff0c;具有超过 100 种服务和多语言翻译的集成。 快速&#xff1a;网站在构建时以静态方式生成&#xff0c;加载时间飞快。安全&#xff1a;所有对后…...

HBase基础知识(二):HBase集群部署、HBaseShell操作

1. HBase安装部署 1.1 Zookeeper正常部署 首先保证Zookeeper集群的正常部署&#xff0c;并启动之&#xff1a; 创建集群启动脚本&#xff1a; #!/bin/bash case $1 in "start"){ for i in hadoop100 hadoop101 hadoop102 do echo----------zookeeper $i 启动----…...

C 标准库 - <time.h>

简介 time.h 头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数。 库变量 下面是头文件 time.h 中定义的变量类型&#xff1a; 序号变量 & 描述1size_t是无符号整数类型&#xff0c;它是 sizeof 关键字的结果。2clock_t这是一个适合存储处理器时间的类型。3…...

养老院自助饮水机(字符设备驱动)

目录 1、项目背景 2、驱动程序 2.1 三层架构 2.2 驱动三要素 2.3 字符设备驱动 2.3.1 驱动模块 2.3.2 应用层 3、设计实现 3.1 项目设计 3.2 项目实现 3.2.1 驱动模块代码 3.2.2 用户层代码 4、功能特性 5、技术分析 6. 总结与未来展望 1、项目背景 养老院的老人…...

Jenkins 构建触发器指南

目录 触发远程构建 (例如&#xff0c;使用脚本) 描述 配置步骤 安全令牌 在其他项目构建完成后触发构建 描述 配置步骤 定时触发构建 描述 配置步骤 GitHub钩子触发GITScm轮询 描述 配置步骤 Poll SCM - 轮询版本控制系统 描述 触发远程构建 (例如&#xff0c;使…...

通用的java中部分方式实现List<自定义对象>转为List<Map>

自定义类 /*** date 2023/12/19 11:20*/ public class Person {private String name;private String sex;public Person() {}public Person(String name, String sex) {this.name name;this.sex sex;}public String getName() {return name;}public String getSex() {return…...

Python---静态Web服务器-返回固定页面数据

1. 开发自己的静态Web服务器 实现步骤: 编写一个TCP服务端程序获取浏览器发送的http请求报文数据读取固定页面数据&#xff0c;把页面数据组装成HTTP响应报文数据发送给浏览器。HTTP响应报文数据发送完成以后&#xff0c;关闭服务于客户端的套接字。 2. 静态Web服务器-返回固…...

react v-18父组件调用子组件的方法和数据

版本 "react": "^18.1.0", "react-dom": "^18.1.0", 父组件 import React, { useState, useRef, memo, useEffect } from "react"; import { useTranslation } from "react-i18next"; import { Card } from &q…...

Linux——缓冲区

我在上篇博客留下了一个问题&#xff0c;那个问题就是关于缓冲区的问题&#xff0c;我们发现 文件有缓冲区&#xff0c;语言有用户级缓冲区&#xff0c;那么缓冲区到底是什么&#xff1f;&#xff0c;或者该怎 么认识缓冲区&#xff1f;这篇文章或许会让你有所认识&#xff0c;…...

Mac 生成Android签名证书 .keystore文件

工具下载地址 https://www.oracle.com/java/technologies/downloads/#jdk21-mac1. 找到安装jdk的路径&#xff0c;并进入bin目录下 1.1 查找JDK命令 /usr/libexec/java_home -v结果为: java_home: option requires an argument -- v /Library/Java/JavaVirtualMachines/jdk…...

电商数仓项目----笔记六(数仓ODS层)

ODS层的设计要点如下&#xff1a; &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步过来的数据结构。 &#xff08;2&#xff09;ODS层要保存全部历史数据&#xff0c;故其压缩格式应选择压缩比较高的&#xff0c;此处选择gzip。 &#xff08;3&#xff09;…...

rtsp视频在使用unity三维融合播放后的修正

1 rtsp 接入 我们使用unity UE 等三维渲染引擎中使用c编写插件来接入rtsp 视频。同时做融合的时候&#xff0c;和背景的三维颜色要一致&#xff0c;这就要使用视频融合修正技术。包括亮度&#xff0c;对比度&#xff0c;饱和度的修正。在单纯颜色上的修正可以简单使用rgb->…...

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候&#xff0c;有投递简历功能&#xff0c;有投递就会有随之而来的查看简历对吧&#xff0c;我投递过的简历&#xff0c;另存为一个文件夹&#xff0c;就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹&#xff0c;用于存放PDF&#x…...

运维笔记之centos部署Go-FastDfs

安装Go-FastDfs 当前最新版本为1.4.5&#xff0c;但发布的最新版本为1.4.4 # 下载文件 wget --no-check-certificate https://github.com/sjqzhang/go-fastdfs/releases/download/v1.4.4/fileserver -O fileserver # 赋权限 chmod x fileserver # 运行 ./fileserver server服…...

C#基础——线程(线程池、线程锁、线程抢占、多线程)

线程 进程&#xff08;Process&#xff09;是由操作系统分配资源并执行的一个独立的程序实&#xff0c;属于Windows的概念&#xff0c;进程结束就表示程序关闭了。 线程&#xff08;Thread&#xff09;是程序中执行的最小单位。一个线程代表了一个独立的执行流&#xff0c;可…...

C# WPF上位机开发(QT vs WPF)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 最近经常收到朋友们的私信&#xff0c;他们对C# WPF开发很感兴趣&#xff0c;但是呢&#xff0c;正当准备学习的时候&#xff0c;又有人告诉他们应…...

2-高可用-负载均衡、反向代理

负载均衡、反向代理 upstream server即上游服务器&#xff0c;指Nginx负载均衡到的处理业务的服务器&#xff0c;也可以称之为real server,即真实处理业务的服务器。 对于负载均衡我们要关心的几个方面如下&#xff1a; 上游服务器配置&#xff1a;使用upstream server配置上…...

STM32 使用ARM仿真器设置

STM32单片机程序下载到单片机芯片中有两种方式&#xff0c;①编译生成HEX&#xff0c;使用程序烧录软件刷到单片机芯片里。②使用ARM仿真器下载程序。使用ARM仿真器的优势是&#xff0c;在工程编译没问题直接在Keil软件里就可以将程序下载到单片机里&#xff0c;并且程序可以在…...

【Java】spring

一、spring spring是一个很大的生态圈&#xff0c;里面有很多技术。 其中最基础的是spring framework&#xff0c;主要的技术 是springboot以及springcloud。 1、spring framework spring framework是spring生态圈中最基础的项目&#xff0c;是其他项目的基础。 1.1、核心…...

C语言中关于操作符的理解

本篇文章只会列出大家在生活中经常使用的操作符 算术操作符 在算数操作符中常用的有&#xff0c;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;% &#xff0c;我们重点讲一讲 / (除) 和 % (模) " / "运算 #include <stdio.h>int main() {int a5/2;fl…...

Flutter本地化(国际化)之App名称

文章目录 Android国际化IOS国际化 Flutter开发的App&#xff0c;如果名称想要跟随着系统的语言自动改变&#xff0c;则必须同时配置Android和IOS原生。 Android国际化 打开android\app\src\main\res\values 创建strings.xml 在values上右键&#xff0c;选择New>Values Res…...

Redis哨兵源码分析

在Redis server启动过程中&#xff0c;实现了实例化和初始化 1、哨兵实例化过程&#xff0c;采用redis sentinel指令实例化还是redis server下的参数实例化--sentinel。 // 检查服务器是否以 Sentinel 模式启动 server.sentinel_mode checkForSentinelMode(argc,argv);/* Re…...

安装Neo4j

jdk1.8对应的neo4j的版本是3.5 自行下载3.5版本的zip文件 地址 解压添加环境变量 变量名&#xff1a;NEO4J_HOME 变量值&#xff1a;D:\neo4j-community-3.5.0 &#xff08;你自己的地址&#xff09; PATH添加&#xff1a; %NEO4J_HOME%\bin (如果是挨着的注意前后英…...

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起&#xff0c;越来越多的人开始关注鸿蒙开发&#xff0c;并希望成为鸿蒙开发者。然而&#xff0c;鸿蒙开发并不适合所有人&#xff0c;那么哪些人最适合学习鸿蒙开发呢&#xff1f;本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…...

深信服技术认证“SCSA-S”划重点:命令执行漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…...

有用dojo做的网站吗/图片优化是什么意思

本文主要向大家介绍了JAVA语言中字符串indexof() 的使用方法介绍&#xff0c;通过具体的内容向大家展示&#xff0c;希望对大家学习JAVA语言有所帮助。Java中字符串中子串的查找共有四种方法(indexof())indexOf 方法返回一个整数值&#xff0c;指出 String 对象内子字符串的开始…...

做国内第一游戏数据门户网站/国内设计公司前十名

问题描述所以我想知道哪一个是我的OpenGL版本。我可以通过SSH访问Ubuntu。我应该执行哪个命令&#xff1f;最佳解决办法检查OpenGL版本&#xff0c;glxinfo | grep "OpenGL version"你会得到如下输出&#xff0c;glxinfo | grep "OpenGL version"OpenGL ve…...

顶级复刻手表网站/推蛙网络

转载于:https://www.cnblogs.com/viplued/p/7765149.html...

网站联动/seo流程

一、集合数据类型(set):无序不重复的集合&#xff0c;交集、并集等功能 二、三元运算符 三、深浅拷贝 1&#xff09;字符串和数字&#xff1a;深浅内存地址都一样 2&#xff09;其他&#xff1a;浅拷贝&#xff1a;仅复制最外面第一层 深拷贝&#xff1a;除了最内层其他均拷贝四…...

返利网站建设/上海整站seo

我加载一个xml内容,并将其保存到磁盘.然后我读了它,并尝试解析.当我成功解析xml时,我应该忽略7行中的IOException吗&#xff1f;catch (IOException ignore) {}或者可能会出现一些问题&#xff1f;private HashMap loadContent(String url){try {BufferedInputStream bStream …...

如何在微信公众号添加wordpress/百度推广后台登录页面

在采样速率和可用带宽方面&#xff0c;当今的射频模数转换器(RF ADC)已有长足的发展。其中还纳入了大量数字处理功能&#xff0c;电源方面的复杂性也有提高。那么&#xff0c;当今的RF ADC为什么有如此多不同的电源轨和电源域&#xff1f;为了解电源域和电源的增长情况&#xf…...