三种简单排序:插入排序、冒泡排序与选择排序 【算法 05】

news2025/1/1 11:46:41

三种简单排序:插入排序、冒泡排序与选择排序

请添加图片描述

在编程中,排序算法是基础且重要的知识点。虽然在实际开发中,我们可能会直接使用标准库中的排序函数(如C++的std::sort),但了解并实现这些基础排序算法对于理解算法思想和提升编程能力非常有帮助。本文将介绍三种常见的排序算法:插入排序、冒泡排序和选择排序,并给出它们的C++实现。

1. 插入排序(Insertion Sort)

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

#include<iostream>  
using namespace std;  
  
void insert(int a[], int len) {  
    // 依次插入每一个元素  
    for (int i = 1; i < len; i++) {  
        int k = a[i];  
        int j = i - 1;  
        // 在已排序的序列中从后向前扫描,找到相应位置并插入  
        for (; a[j] > k && j >= 0; j--) {  
            a[j + 1] = a[j];  
        }  
        a[j + 1] = k;  
        // 打印当前排序过程(可选)  
        for (int z = 0; z <= i; z++) cout << a[z] << " ";  
        cout << endl;  
    }  
}  
  
int main() {  
    int r[] = {3, 1, 2, 45, 6};  
    int len = sizeof(r) / sizeof(int);  
    insert(r, len);  
    // 打印排序后的数组  
    for (int i = 0; i < len; i++) cout << r[i] << endl;  
}
2. 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止。

#include<iostream>  
#include<algorithm> // 引入swap函数  
using namespace std;  
  
void bub(int a[], int len) {  
    // 冒n-1次泡  
    for (int i = 0; i < len - 1; i++) {  
        for (int j = 0; j < len - i - 1; j++) {  
            if (a[j] > a[j + 1]) swap(a[j], a[j + 1]);  
        }  
        // 打印当前排序过程(可选)  
        for (int z = 0; z < len; z++) cout << a[z] << " ";  
        cout << endl;  
    }  
}  
  
int main() {  
    int r[] = {5, 4, 3, 2, 1};  
    int len = sizeof(r) / sizeof(int);  
    bub(r, len);  
    // 打印排序后的数组  
    for (int i = 0; i < len; i++) cout << r[i] << endl;  
}
3. 选择排序(Selection Sort)

选择排序算法是一种简单直观的排序算法。它的工作原理是首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

#include<iostream>  
#include<algorithm> // 引入swap函数  
using namespace std;  
  
void select(int a[], int len) {  
    // 遍历n次,每次找到最小元素并放到正确的位置  
    for (int j = 0; j < len; j++) {  
        int index = j;  
        for (int i = j + 1; i < len; i++) {  
            if (a[i] < a[index]) index = i;  
        }  
        swap(a[index], a[j]);  
        // 打印当前排序过程(可选)  
        for (int z = 0; z < len; z++) cout << a[z] << " ";  
        cout << endl;  
    }  
}  
  
int main() {  
    int r[] = {5, 4, 3, 2, 1, 123, -2, 0};  
    int len = sizeof(r

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

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

相关文章

JS编程中有哪些常见的编程“套路”或习惯

JS编程中有哪些常见的编程“套路”或习惯 从个人的编程经验来看&#xff0c;不管你是前端JS编程还是后端Java编程&#xff0c;在一些习惯上基本是通用的。就是你编写的JS代码必须要功能完善且易于阅读易于维护。那么这里整理一下JS编程过程中一些比较行之有效的编程习惯。 函数…

3.Default Constructor的构造操作

目录 1. 问题引入 2. 4种implicitly声明的default constructor 1. 问题引入 “default constructors......在需要的时候被编译产生出来”。关键词是“在需要的时候”&#xff0c;被谁需要&#xff0c;做什么事情&#xff1f;看看下面的代码&#xff0c;然后梳理下思路。 cl…

章二十、Servlet ——

一、 web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互&#xff0c;流程如下&#xff1a; ● 什么是服务器&#xff1f; Web服务器是指驻留于因特网上某种类型计算机的程序&#xff0c;它可以向浏览器等Web客户端提供文档&#xff0c;也可以放置…

算法的学习笔记—反转链表(牛客JZ24)

&#x1f600;前言 在算法面试中&#xff0c;链表问题是一个常见的考点&#xff0c;而反转链表更是其中的经典题目之一。本篇文章将通过具体的代码实现和思路解析&#xff0c;带你深入理解反转链表的解法。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;反…

【前端】NodeJS:项目上线

文章目录 1 项目上线1.1 搭建本地仓库1.1.1 初始化仓库1.1.2 全局忽略1.1.3 提交 1.2 连接远程仓库1.2.1 新建仓库1.2.2 复制地址1.2.3 添加远程存储库 1.3 发布项目 2 配置HTTPS证书2.1 HTTPS2.2 操作流程: 1 项目上线 1.1 搭建本地仓库 1.1.1 初始化仓库 1.1.2 全局忽略 1.…

福泰轴承股份有限公司进销存系统pf

TOC springboot413福泰轴承股份有限公司进销存系统pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#…

Idea里配置Maven版本

一、安装Maven 1. 官网下载maven地址&#xff1a; Maven – Download Apache Maven Binary是可执行版本&#xff0c;已经编译好可以直接使用。 Source是源代码版本&#xff0c;需要自己编译成可执行软件才可使用。tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是…

AWS域名注册服务:为您的在线业务打下坚实基础

在如今的数字时代&#xff0c;域名是每个在线业务的基础。一个好的域名不仅可以提升品牌形象&#xff0c;还能为用户提供便捷的访问体验。亚马逊网络服务&#xff08;AWS&#xff09;提供了强大的域名注册服务&#xff0c;帮助企业轻松获取和管理域名。我们九河云将深入探讨AWS…

Spring:IOC的详解☞Bean的实例化、Bean的生命周期

1、Bean基础配置 bean的基础配置&#xff1a; <bean id"" class""/> Bean的别名&#xff1a;name属性 Bean的作用范围&#xff1a;scope配置 使用bean的scope属性可以控制bean的创建是否为单例&#xff1a; singleton 默认为单例prototype 为非单…

HiveSQL:提取json串内容——get_json_oject和json_tuple

提取json串中内容&#xff0c;json格式示例如下 方法&#xff08;运行环境Hive&#xff09; get_json_objectjson_tuple get_json_object select json_data,get_json_object(json_data,$.price) as price -- 取第一层,get_json_object(json_data,$.inquiry_params) as in…

Hive3:常用的内置函数

1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整&#xff0c;设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…

wordpress资源下载博客站微信小程序源码v1.0

小程序说明&#xff1a; 本套源码基于hbuilder制作&#xff0c;支持QQ小程序&#xff0c;微信小程序等各大平台小程序版本&#xff0c;小程序需要配合后端wordpres系统管理发布&#xff0c;带有广告功能&#xff0c;非常适合运营。 功能说明&#xff1a; 1.全新pods rest a…

IDEA中如何配置Gradel加速与相关依赖找不到如何解决?

如何配置依赖加速 参考文章: https://www.cnblogs.com/yongdaimi/p/17892882.html 配置步骤 新版本的IDEA中进行插件开发需要单独下载开发插件 具体配置一下镜像加速 安装好上面的插件,进行下面这些配置。 在上面本地安装路劲在进行镜像加速的配置 新建一个init.gra…

数学建模——评价决策类算法(熵权法、模糊综合评价)

一、熵权法&#xff08;求解权重&#xff09; 概念原理 代码 import numpy as np # 导入numpy库&#xff0c;并简称为np# 定义一个自定义的对数函数mylog&#xff0c;用于处理输入数组中的零元素 def mylog(p):n len(p) # 获取输入向量p的长度lnp np.zeros(n) # 创建一个…

C语言典型例题42

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题3.2 有3个整数a&#xff0c;b&#xff0c;c&#xff0c;由键盘输入&#xff0c;输出其中最大的数&#xff0c;请编程序。 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习…

URP 2022.3 custom render pass

这里需要注意&#xff0c;有两个部分要做&#xff0c;一步是写脚本和shader&#xff0c;一步是在editor里进行绑定 这里有个概念上需要注意的&#xff0c;他这个pass啊&#xff0c;实际依赖问题都需要你自己在execute处理的&#xff0c;比如你要画N次东西&#xff0c;就要在exe…

管易云·奇门与MySQL对接集成历史发货单查询连通执行操作-v1(管易历史发货单)

管易云奇门与MySQL对接集成历史发货单查询连通执行操作-v1(管易历史发货单) 接通系统&#xff1a;管易云奇门 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c…

算法力扣刷题记录 八十三【96.不同的二叉搜索树】

前言 动态规划第9篇。记录 八十三【96.不同的二叉搜索树】。 一、题目阅读 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输…

开箱即用的企业级CICD工具-云效流水线 Flow

开箱即用的企业级CICD工具-云效流水线 Flow 开箱即用的企业级CICD工具-云效流水线 Flow资源领取实操来啦编排流水线新建主机组运行流水线运行结果 关于 云效流水线 Flow 的一些看法操作感受新人建议满意与建议流水线Flow 优势 开箱即用的企业级CICD工具-云效流水线 Flow 看到这…

短视频SDK解决方案,降低行业开发门槛

美摄科技匠心打造了一款集前沿技术与极致体验于一体的短视频SDK解决方案&#xff0c;它不仅重新定义了短视频创作的边界&#xff0c;更以行业标杆级的短视频特效&#xff0c;让每一帧画面都闪耀不凡光芒。 【技术赋能&#xff0c;创意无限】 美摄科技的短视频SDK&#xff0c;…