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

插入排序算法(C++版)

1、什么是插入排序

插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是将一个待排序的数组分为已排序和未排序两个部分,然后逐步将未排序的元素插入到已排序的部分,直到整个数组有序。

2、插入排序的基本步骤:

  1. 初始化:将数组的第一个元素视为已排序部分,其余的元素视为未排序部分。

  2. 逐步插入:从未排序部分取出一个元素,插入到已排序部分的适当位置,使得已排序部分仍然有序。

  3. 重复:重复步骤2,直到未排序部分为空,整个数组变得有序。

3、插入排序的适用范围和特点:

适用范围

  • 插入排序适用于小规模的数据集或部分有序的数据集。
  • 当数据规模较小时,插入排序的效率较高,而且对于基本有序的数据集,插入排序的性能表现也不错。

特点

  1. 简单直观:插入排序是一种直观且易于理解的排序算法,适用于教学和小规模数据集的排序。

  2. 稳定性:插入排序是一种稳定的排序算法,相同元素的相对顺序在排序前后不会改变。

  3. 原地排序:插入排序是一种原地排序算法,它不需要额外的内存空间来存储临时数据。

  4. 适应性:对于基本有序的数据集,插入排序的性能较好。算法会在已有的有序部分快速找到适当位置插入新元素。

  5. 时间复杂度:最坏情况下的时间复杂度为O(n2),最好情况下(已经有序)的时间复杂度为O(n),平均时间复杂度为O(n2)。

虽然插入排序在大规模数据集上的性能不如一些高级排序算法(例如快速排序、归并排序),但在某些特定场景下,插入排序可以是一个合适的选择,尤其是对于小规模或基本有序的数据。

4、插入排序算法示例

#include <iostream>
#include <vector>void insertionSort(std::vector<int> &arr) {int n = arr.size();for (int i = 1; i < n; ++i) {int key = arr[i];int j = i - 1;// 将比 key 大的元素向右移动while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];--j;}// 将 key 插入到合适的位置arr[j + 1] = key;}
}void printArray(const std::vector<int> &arr) {for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;
}int main() {std::vector<int> arr = {64, 34, 25, 12, 22, 11, 90};std::cout << "Unsorted array: ";printArray(arr);insertionSort(arr);std::cout << "Sorted array: ";printArray(arr);return 0;
}

这个程序中,insertionSort 函数是插入排序的主要函数,其中使用了嵌套的循环来逐步构建有序序列。每一轮,将一个未排序元素插入到已排序序列的适当位置。printArray 函数用于打印数组元素。

这是一种简单而直观的排序算法,特别适用于小型数据集或已经基本有序的数据。

相关文章:

插入排序算法(C++版)

1、什么是插入排序 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的基本思想是将一个待排序的数组分为已排序和未排序两个部分&#xff0c;然后逐步将未排序的元素插入到已排序的部分&#xff0c;直到整个数组有序。 2、插入排序的…...

Tracking vs. No-Tracking Queries

学习链接 Tracking queries By default, queries that return entity types are tracking. A tracking query means any changes to entity instances are persisted by SaveChanges. var blog context.Blogs.SingleOrDefault(b > b.BlogId 1); blog.Rating 5; contex…...

Centos7安装frps实现内网穿透

前提 公网设备&#xff1a;云服务器1台&#xff0c;带公网IP 内网设备&#xff1a;linux、群晖、openwrt都可以 我的环境&#xff1a; 云服务器&#xff1a;centos7.9 内网&#xff1a;openwrt软路由 防火墙&&安全组 关闭云服务器的防火墙&#xff1a; 关闭防火墙…...

cryptopp Base64Encoder \n问题

1、问题&#xff1a; new Base64Encoder(new StringSink(out_base)) 调用库函数Base64Encoder进行base64加密后确认多出来了\n 2、原因 base64加密的问题, 由于base64一行不能超过76字符, 超过就会添加回车换行符(在Windows中是 \r\n , 在Linux中是 \n ) 3、解决 方法一、给定参…...

一种艺术风格的神经算法:总结与实现

一、说明 神经风格或神经转移允许以新的艺术风格再现给定的图像。在这里,我介绍了 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 提出的神经风格算法。该算法接收样式图像、内容图像和输入图像,输入图像可以是空的白色图像,也可以是内容图像的副本。因此,…...

【Mysql系列】Mysql基础篇

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

C++面试题之C++中的指针参数传递和引用参数传递

在C中&#xff0c;可以使用指针参数传递和引用参数传递来将参数传递给函数。这两种方法都可以修改函数外部的变量。 指针参数传递: 当使用指针参数传递时&#xff0c;函数接收一个指向变量的指针作为参数。在函数内部&#xff0c;通过解引用指针来访问和修改原始变量的值。这种…...

[Android]Unresolved reference: appcompat

问题 我创建了一个Kotlin class&#xff0c;然后导入并同步了依赖 implementation("androidx.appcompat:appcompat:1.6.1”)&#xff0c;但Class中还是提示报错还是提示Unresolved reference: appcompat 。 代码如下&#xff1a; package com.example.gatestdemol imp…...

网络运维Day14

监控概述 监控的目的 报告系统运行状况每一部分必须同时监控内容包括吞吐量、反应时间、使用率等提前发现问题进行服务器性能调整前&#xff0c;知道调整什么找出系统的瓶颈在什么地方 监控的资源类别 公开数据 Web、FTP、SSH、数据库等应用服务TCP或UDP端口 私有数据 CPU、内…...

Mac常用软件安装

brew安装 brew 是从下载源码解压然后 ./configure && make install &#xff0c;同时会包含相关依存库。并自动配置好各种环境变量&#xff0c;而且易于卸载。 这个对程序员来说简直是福音&#xff0c;简单的指令&#xff0c;就能快速安装和升级本地的各种开发环境。 …...

node 文件上传操作(前端 form表单上传 formData上传 后端 node 使用express+multer)

目录 前端form表单上传formData上传 后端 node 使用expressmulter 前端 form表单上传 <h1>个人信息</h1><form action"http://localhost:3000/api/sendFile" method"post" enctype"multipart/form-data"><label for"…...

容器数据卷+MYSQL实战

什么是容器数据卷&#xff1f; 让我们回忆一下docker理念&#xff1a; 就是将应用和环境打包成一个镜像 数据&#xff1f; 如果数据都在容器中&#xff0c;那么我们删除容器&#xff0c;数据就会丢失 &#xff01;需求&#xff1a;数据持久化就完美了 对于MYSQL&#xff0…...

开发者测试2023省赛--UnrolledLinkedList测试用例

测试结果 官方提交结果 EclEmma PITest 被测文件UnrolledLinkedList.java /** This source code is placed in the public domain. This means you can use it* without any restrictions.*/package net.mooctest;import java.util.AbstractList; import java.util.Collectio…...

HoudahGeo 6 for Mac:掌控地理位置信息的强大工具

在当今这个信息化的世界&#xff0c;地理位置信息的重要性日益凸显。无论是在工作、学习还是生活中&#xff0c;我们都需要理解和利用地理位置信息。如果你正在寻找一个能帮助你更好地管理和理解地理位置信息的工具&#xff0c;那么HoudahGeo 6 for Mac是一个值得考虑的选择。 …...

Xilinx Artix7-100T低端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…...

C与汇编深入分析

汇编怎么调用C函数 直接调用 BL main传参数 在arm中有个ATPCS规则&#xff08;ARM-THUMB procedure call standard&#xff09;&#xff08;ARM-Thumb过程调用标准&#xff09;。 约定r0-r15寄存器的用途&#xff1a; r0-r3&#xff1a;调用者和被调用者之间传递参数r4-r11…...

MySQL中外键的使用及外键约束策略

一、外键约束的概念 外键约束&#xff08;FOREIGN KEY,缩写FK是数据库设计的一个概念&#xff0c;它确保在两个表之间的关系保持数据的一致性和完整性。 外键是指表中的某个字段的依赖于另一张表中某个字段的值&#xff0c;而被依赖的字段必须具有主键约束或者唯一约束&#…...

Home Assistant使用ios主题更换背景

Home Assistant使用ios主题、更换背景 lovelace-ios-dark-mode-theme 默认前置情况&#xff0c;1、已安转HACS插件2、搜索安装 IOS Dark Mode Theme1&#xff09;第一、二步应该很容易实现&#xff0c;configuration.yaml文件很容易被找到2&#xff09;而本人在进行第三步操作时…...

深入了解鼠标光标的设置过程

有一位读者问了这样一个问题&#xff1a; “为什么鼠标光标的设定绑定在窗口类&#xff0c;而不是窗口上&#xff1f;” 这个问题隐含地假设了光标与窗口类相关联。虽然每个窗口类都有一个关联的光标&#xff0c;但决定使用哪个光标的是窗口。 光标设置过程在 WM_SETCURSOR 消…...

数据结构-散列表

列表&#xff08;Hash Table&#xff09;&#xff0c;又称哈希表&#xff0c;是一种数据结构&#xff0c;特点是&#xff1a;数据元素的关键字与其存储地址直接相关 例&#xff1a;有一堆数据元素&#xff0c;关键字分别为&#xff5b;19&#xff0c;14&#xff0c;23&#xff…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...