算法设计-插入排序(C++)

embedded/2025/2/1 1:44:32/

一、算法原理

插入排序是一种简单直观的排序算法,它的工作原理是将未排序数据插入到已排序序列的合适位置。具体来说,插入排序将数组分为已排序和未排序两部分,初始时已排序部分只有数组的第一个元素,然后依次从未排序部分取出元素,将其插入到已排序部分的合适位置,直到整个数组都被排序。

二、详细代码

#include<iostream>
using namespace std;int InsertSort(int arr[], int size)
{int x, i;for( int j = 1; j < size; j++){x = arr[j];i = j - 1;while( i >= 0 && x < arr[i]){arr[i+1] = arr[i];i = i - 1;}arr[i+1] = x;}for(int s = 0; s < size; s++){cout<<arr[s]; }cout<<endl;
}int main()
{int size;std::cout<<"Enter size:";std::cin>>size;int* arr =new int[size];for(int i = 0;i<size;i++){cout<<"arr element:";cin>>arr[i]; }
InsertSort(arr,size);
delete[] arr;
return 0;}

三、详细解释

  • 排序过程

    1. 外层循环for( int j = 1; j < size; j++),从数组的第二个元素开始(索引为 1),依次将未排序部分的元素插入到已排序部分。
    2. 保存当前元素x = arr[j];,将当前要插入的元素保存到变量 x 中。
    3. 内层循环while( i >= 0 && x < arr[i]),从已排序部分的最后一个元素开始,向前比较,如果当前元素 x 小于已排序部分的元素 arr[i],则将 arr[i] 向后移动一位,即 arr[i+1] = arr[i];,并将 i 减 1。
    4. 插入元素:当找到合适的位置后,将当前元素 x 插入到该位置,即 arr[i+1] = x;
  • 输出排序结果

    • 使用 for 循环遍历数组,并使用 cout 输出每个元素,最后换行。

复杂度分析

  • 时间复杂度:插入排序的平均时间复杂度和最坏时间复杂度都是O(n2) ,其中n 是数组的大小。在最好情况下,即数组已经有序时,时间复杂度为O(n) 。
  • 空间复杂度:插入排序只需要常数级的额外空间,因此空间复杂度为 O(1)。

http://www.ppmy.cn/embedded/158502.html

相关文章

APT (Advanced Package Tool) 安装与使用-linux014

APT (Advanced Package Tool) APT (Advanced Package Tool) 是一个用于管理 Debian 和 Ubuntu 系列 Linux 发行版上的软件包的工具。它简化了软件的安装、升级、配置和删除过程。APT 为用户提供了一个统一的命令行接口&#xff0c;使得管理和安装软件变得更加简单。 APT 主要…

微信阅读网站小程序的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

解决MacOS安装软件时提示“打不开xxx软件,因为Apple无法检查其是否包含恶意软件”的问题

macOS 系统中如何开启“任何来源”以解决安装报错问题&#xff1f; 大家好&#xff01;今天我们来聊聊在使用 macOS 系统 时&#xff0c;遇到安装应用软件时出现报错的情况。这种情况常常发生在安装一些来自第三方开发者的应用时&#xff0c;因为 macOS 会默认阻止不明开发者的…

蓝桥杯准备 【入门2】分支结构

P5709 【深基2.习6】Apples Prologue / 苹果和虫子 题目描述 小 B 喜欢吃苹果。她现在有 mm&#xff08;1≤m≤100&#xff09;个苹果&#xff0c;吃完一个苹果需要花费 tt&#xff08;0≤t≤100&#xff09;分钟&#xff0c;吃完一个后立刻开始吃下一个。现在时间过去了 ss&a…

Python | Pytorch | Tensor知识点总结

如是我闻&#xff1a; Tensor 是我们接触Pytorch了解到的第一个概念&#xff0c;这里是一个关于 PyTorch Tensor 主题的知识点总结&#xff0c;涵盖了 Tensor 的基本概念、创建方式、运算操作、梯度计算和 GPU 加速等内容。 1. Tensor 基本概念 Tensor 是 PyTorch 的核心数据结…

《DeepSeek R1:开启AI推理新时代》

《DeepSeek R1&#xff1a;开启AI推理新时代》 一、AI 浪潮中的新星诞生二、DeepSeek R1 的技术探秘&#xff08;一&#xff09;核心技术架构&#xff08;二&#xff09;强化学习的力量&#xff08;三&#xff09;多阶段训练策略&#xff08;四&#xff09;长序列处理优势 三、…

【fly-iot飞凡物联】(20):2025年总体规划,把物联网整套技术方案和实现并落地,完成项目开发和课程录制。

前言 fly-iot飞凡物联专栏&#xff1a; https://blog.csdn.net/freewebsys/category_12219758.html 1&#xff0c;开源项目地址进行项目开发 https://gitee.com/fly-iot/fly-iot-platform 完成项目开发&#xff0c;接口开发。 把相关内容总结成文档&#xff0c;并录制课程。…

RabbitMQ模块新增消息转换器

文章目录 1.目录结构2.代码1.pom.xml 排除logging2.RabbitMQConfig.java3.RabbitMQAutoConfiguration.java 1.目录结构 2.代码 1.pom.xml 排除logging <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…