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

C++数据结构X篇_21_插入排序(稳定的排序)

文章目录

  • 1. 插入排序原理
  • 2. 算法图解
  • 3. 核心代码:
  • 4. 插入排序整体代码实现

1. 插入排序原理

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

  1. 原理是将无序序列插入到有序序列中
  2. 直接插入排序的两种性质:
  • 当待排序的原序列中大多数元素都已有序的情况下,此时进行的元素比较和移动的次数较少;

  • 当原序列的长度很小时,即便它的所有元素都是无序的,此时进行的元素比较和移动的次数还是很少。

后篇介绍的希尔排序就是基于上面2个性质的改进

2. 算法图解

将待排序的集合看做两部分,已排序的区间(0…i) ; 待排序的区间[i…n);每次选择无序区间的第一个元素插入到有序区间的合适位置,直到整个数组有序。

因为不知道数组中得前几个元素是已经有序的,所以直接从第二个元素开始执行插入排序,将每个元素都进行一次插入排序。

算法图解如下:
在这里插入图片描述

3. 核心代码:

void insert_sort(int arr[], int length)  //升序
{int j;//第一个元素当做有序的,第二个看做无序,从第二个插入第一个元素并进行比较for (int i = 1; i < length; i++){if (arr[i] < arr[i - 1])  //比升序序列最大值要小,进入插入排序{int temp = arr[i];//从右向左for (j = i - 1; j >= 0; j--){if (temp < arr[j]) //升序序列中元素大于arr[i]{arr[j + 1] = arr[j]; //向前移动一位}else{break;}}arr[j + 1] = temp;}}
}

4. 插入排序整体代码实现

#include <iostream>
using namespace std;void swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}//打印数组
void printArr(int arr[])
{for (int i = 0; i < 10; i++){cout << arr[i] << endl;}
}//插入排序
void insert_sort(int arr[], int length)  //升序
{int j;for (int i = 1; i < length; i++){if (arr[i] < arr[i - 1])  //比升序序列最大值要小{int temp = arr[i];for (j = i - 1; j >= 0; j--){if (temp < arr[j]) //升序序列中元素大于arr[i]{arr[j + 1] = arr[j]; //向前移动一位}else{break;}}arr[j + 1] = temp;}}printArr(arr);
}int main()
{int arr[] = { 8,2,3,9,6,4,7,1,5,10 };insert_sort(arr, 10);system("pause");return 0;
}

运行结果:
在这里插入图片描述

  1. 插入排序,插入排序代码实现,插入排序代码思路梳理
  2. 优秀博文:十大经典排序算法-插入排序算法详解,常见的几种排序(C++)
http://www.lryc.cn/news/206873.html

相关文章:

  • 【Unity】3D跑酷游戏
  • bp前端验证码绕过及token绕过
  • Jmeter(十四):跨线程组传递jmeter变量及cookie的处理详解
  • css实现圆形进度条
  • 适用于 Windows 10 和 Windows 11 设备的笔记本电脑管理软件
  • YOLOv5论文作图教程(1)— 软件介绍及下载安装(包括软件包+下载安装详细步骤)
  • AutoCAD 2024 Mac中文附激活补丁 兼容M1.M2电脑
  • Jmeter基础---while控制器举例说明
  • 正点原子嵌入式linux驱动开发——RGB转HDMI
  • 前端时间分片渲染
  • 亿图导出word和PDF中清晰度保留方法
  • chatGPT结构及商业级相似模型应用调研
  • HarmonyOS鸿蒙原生应用开发设计- 华为分享图标
  • Java基础-反射
  • 计算机毕设 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化
  • 【转载】 Bytedance火山引擎智能拥塞控制算法 VICC
  • Postman如何测试WebService接口
  • 微服务-Eureka
  • 超声电机工作原理
  • 基于人工蜂鸟优化的BP神经网络(分类应用) - 附代码
  • 两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称,根据属性名称处理两个list
  • 为什么C++能搜到的框架介绍都好抽象?
  • 人工智能(6):机器学习基础环境安装与使用
  • 电力巡检/电力抢修行业解决方案:AI+视频技术助力解决巡检监管难题
  • 区块链轻节点的问答
  • 常用Web安全扫描工具汇整
  • 查看当前cmake版本支持哪些版本的Visual Studio
  • 岩土工程桥梁监测中智能振弦传感器的应用方案
  • 上云容灾如何实现碳中和-万博智云受邀参加1024程序员节数据技术论坛并发表演讲
  • 蓝桥杯每日一题2023.10.26