插入排序-排序算法

前言

在玩斗地主的时候,你是如何理牌的?

当我们手中没扑克牌时,不管抓的是什么牌,都是放到手里。其他时候拿到一张牌,是从右向左找一个位置:右边是大于这张牌,左边是小于等于这张牌或者左边没有牌。而插入排序的思想就是这个。

插入排序

插入排序:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因为在从后向前扫描的过程中,需要反复把已排序的元素逐步向后挪位,为新元素提供插入空间。

具体描述如下:

1.从第一个元素开始,该元素可以认为已经被排序;

2.取出下一个元素,在已经排序的元素序列中从后向前扫描;

3.如果该元素(己排序)大于新元素,将该元素移到下一位置;
重复步骤3,直到找到己排序的元素小于或者等于新元素的位置。

4.将新元素插入到该位置;

重复步骤2~5

例子

下面提供一个例子直观地展示前面的概念,以这一组数据:18,14,10,19,1,3 为例。

1.首先从第一个元素 18 开始考虑,因为只有一个,认为已经有序(有序序列用橙色表示)。

2.选取下一个元素 14 保存起来,并让 14 所在的位置空出来,在有序的序列中从后往前遍历。

3.元素 18 大于新元素 14 ,将元素 18 向后移动。

4.元素 18 前已经没有元素了,将刚刚保存的元素 14 放到空位。这样,14这个新元素就加入了有序序列。

5.选取下一个元素 10 保存起来,并让10所在的位置空出,在有序的序列中从后向前扫描。

6.元素 18 大于 10 , 18 向后移一位。

7.元素 14 大于 10,14向后移动。

8.元素 14 前已经没有数了,将刚刚保存下来的元素 10 放到空位中。这样,有序序列又加入了一个数 10。

9.选取下一个元素 19 保存起来,让其所在位置空出,在有序序列中由后到前比较。

10.不断比较,直到找到小于等于新元素的位置,恰好第一次比较就找到了 18 ,把 19 放入空位。

……

这样重复地比较、挪位,放入位置。就能得到有序的整个数组。

代码

也许上面这个过程你能明白,可是代码才是解决问题的。

#include <iostream>
using namespace std;void InsertSort(int arr[], int left, int right)
{int current = 0; // 保存要插入的元素的值(新元素)int preindex = 0; // 指向有序序列中的数for (int i = left + 1; i <= right; i++){current = arr[i];preindex = i - 1;while (preindex >= left && arr[preindex] > current){arr[preindex + 1] = arr[preindex];preindex--;} //循环结束后就找到了合适的位置的前一个位置arr[preindex + 1] = current;}}int main(void)
{int arr[] = { 18,14,10,19,1,3 };int len = sizeof(arr) / sizeof(arr[0]);InsertSort(arr, 0, len - 1);for (int i = 0; i < len; i++){cout << arr[i] << " ";}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高照数量关系(三)—— 溶液问题 、植树问题、方阵问题、经济问题、基础行程、相对行程

溶液问题 溶液公式 反复操作 等量变化&#xff1a;蒸发稀释类 植树问题 两端 单端&#xff08;环形&#xff09; 楼间植树 不移动棵树 容斥原理种树问题 方阵问题 经济问题 基础经济 方程法 有具体钱数 赋值法 分段计费 函数最值 基础行程 普通行程 火车过桥 匀加速 等距…

从0到1实战微服务架构之Nacos下载安装

目录 一、前言 二、Nacos概述 三、Nacos架构 3.1 Open API 3.2 Config Service 3.3 Naming Service 3.4 Nacos Core 3.5 Consistency Protocol 四、Nacos部署实践 4.1 Nacos下载 4.2 Nacos部署 五、总结 一、前言 Nacos是一个开源的、易于使用的、功能丰富的平台&a…

我的年度总结(大一程序员的自述)

呀哈喽&#xff0c;我是结衣。 我也来参加这个年度总结的话题咯&#xff0c;喜欢的话可以点个赞哦。 作为一个大一新生&#xff0c;我从1级的编程小白到了现在的2级编程小白。在7月份之前我可以说是完全不了解编程的一位新人&#xff0c;对应电脑的了解也就只会打游戏看电视和浏…

JMeter 批量接口测试

一、背景 最近在进行某中台的接口测试准备&#xff0c;发现接口数量非常多&#xff0c;有6、70个&#xff0c;而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值。想了几种方案后&#xff0c;决定尝试使用JMeter的csv读取来实现批量的接口…

遥感影像大气校正二:6s模拟结果提取并计算

上一篇总结了6s使用方法&#xff0c;这篇文章接着6s模拟结果介绍大气校正如何计算。 6s输出介绍&#xff1a; 输出第一节内容&#xff1a; 输出第二节内容&#xff1a; 输出第三节内容&#xff1a; 输出第四节内容&#xff1a; 大气校正计算公式&#xff1a; 公式1&#xff…

【c++】vector模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕vector模拟 > 毒鸡汤&#xff1a;在等待…

通过两台linux主机配置ssh实现互相免密登入

一 1.使用Xshell远程连接工工具生成公钥文件 2.生产密钥参数 3.生成公钥对 4.用户密钥信息 5.公钥注册 二 1.关闭服务端防火墙 ---systemctl stop firewalld 2.检查是否有/root/.ssh目录&#xff0c;没有则创建有则打开/root/.ssh/authorized_keys文件将密钥粘贴创建/ro…

Halcon 模板匹配基于轮廓(形状)

文章目录 halcon 案例 基于缩放比halcon 案例 测单个剃须刀片Halcon 案例创建匹配模板Halcon 通过图像处理创建模型 ROI模型Halcon 亚像素识别Halcon 识别不等比例的图像Halcon 匹配包装袋案例Halcon 创建模板进行匹配Halcon 案例模板匹配与测量Halcon 多模板与多图像的匹配 ha…

Vulnhub靶机:Corrosion 2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;corrosion:2&#xff08;10.0.2.13&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/c…

常用服务器管理面板整理汇总

服务器管理面板是用于管理和控制服务器的软件&#xff0c;可以帮助管理员更轻松地进行服务器管理和维护。以下是几种常用的服务器管理面板&#xff1a; 1、宝塔面板【官网直达】 宝塔面板是一款服务器运维管理软件&#xff0c;支持Windows和Linux等操作系统&#xff0c;提供了…

你猜不到的2024年!特斯拉首席预言家马斯克,发表预言惹社交平台沸腾,2024年真的...

埃隆马斯克&#xff0c;特斯拉首席执行官&#xff0c;一向以其独特的见解和预测而备受瞩目。最新消息显示&#xff0c;他对2024年的预测让人瞠目结舌&#xff0c;称2024将比过去四年更加“疯狂”。 就在2024年刚刚来临的时候&#xff0c;有人在社交平台上发问&#xff0c;希望…

在Vue表格里写入一个缩略图,并且点击缩略图时,弹出窗口会显示对应的大图

成果图展示&#xff1a; 点击缩略图之后&#xff1a;右上角或者点击幕布之外都可以关闭 template 部分代码展示 这段代码拿去可以直接运行&#xff0c;记得图片路径改成自己的&#xff01; <template><div><el-table :data"tableData"><el-…