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

server/2025/2/4 1:46:41/

一、算法原理

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

二、详细代码

#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/server/164766.html

相关文章

java 异常处理

public class Main {/*what:exception copy withwhat character &#xff1a;1.try catch finally 测试语句 捕获异常后不再终止程序 函数结束后输出异常类名字 异常产生类 方法 行数2.小异常&#xff08;小范围&#xff09;在前 大异常在后 保证 大异常托底例&#xff1a;j…

Golang Gin系列-9:Gin 集成Swagger生成文档

文档一直是一项乏味的工作&#xff08;以我个人的拙见&#xff09;&#xff0c;但也是编码过程中最重要的任务之一。在本文中&#xff0c;我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证&#xff0c;请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…

第1节课:算法初印象—开启算法世界的大门

目录 一、算法是什么&#xff08;一&#xff09;官方定义&#xff08;二&#xff09;算法的五大特性&#xff08;三&#xff09;算法与程序的关系 二、算法在生活中的奇妙体现&#xff08;一&#xff09;日常出行中的算法&#xff08;二&#xff09;购物消费中的算法&#xff0…

【论文复现】基于Otsu方法的多阈值图像分割改进鲸鱼优化算法

目录 1.摘要2.鲸鱼优化算法WOA原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了一种基于Otsu方法的多阈值图像分割改进鲸鱼优化算法&#xff08;RAV-WOA&#xff09;。RAV-WOA算法能够在分割灰度图像和彩色图像时&#xff0c;自动选择最优阈值&#xff0c;并确…

嵌入式C语言:大小端详解

目录 一、大小端的概念 1.1. 大端序&#xff08;Big-endian&#xff09; 1.2. 小端序&#xff08;Little-endian&#xff09; 二、大小端与硬件体系的关系 2.1. 大小端与处理器架构 2.2. 大小端与网络协议 2.3. 大小端对硬件设计的影响 三、判断系统的大小端方式 3.1.…

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍&#xff1a; 1.1 项目摘要 随着科技的进步&#xff0c;计算机硬件技术日新月异&#xff0c;包括处理器&#xff08;CPU&#xff09;、主板、内存、显卡等关键部件的性能不断提升&#xff0c;为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…

【机器学习】深入无监督学习分裂型层次聚类的原理、算法结构与数学基础全方位解读,深度揭示其如何在数据空间中构建层次化聚类结构

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: 机器学习专栏 目录 引言 分裂型层次聚类&#xff08;Divisive Hierarchical Clustering&#xff09; 1. 基本原理 2. 分裂型层次聚类的算法步骤 Step 1: 初始化 Step 2: 选择分裂的簇 Step 3: 执行分裂操作…

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段&#xff1a;初始化项目 初始化项目&#xff0c;这里使用的是pnpm&#xff0c;也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…