排序算法-----插入排序

目录

前言:

插入排序

 原理图

代码实现

分析总结

二分法插入排序

代码实现


前言:

        嗨嗨^_^,米娜桑,今天我们继续学习排序算法中的插入排序,激不激动,兴不兴奋呢!好了废话不多说,下面请看正文!

插入排序

         插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

 原理图

 初始数组如下所示:

第一次,拿到第一个数字,因为第一个数字不存在顺序,无法进行比较,所以不需要进行相关的操作 第二次,拿到第二个数字 1 ,与前面的数字进行比较,发现6比1大,那么就进行数字交换,如下图所示:

第三次,拿到数字9,发现9,比前面的两个数字都要大,那么就保持位置不变,继续往后看。

 第四次,拿到数字2,此时发现,2比9小,比6小,比1大,那么就把2插入到1和6之间,6和9依次向后移动一位。

第五次,拿到数字4,此时把数字4插入到2和6之间,同样的6和9依次往后移动一位。

第六次,拿到数字8,此时8比9小,那么就插入到9的前面即可,9向后移动一位

第七次,拿到12,发现12比前面已排序好了的数字都要大,那么位置不变。

 第八次,拿到10,此时10比12小,比9大,那么就插入到9和12之间,12向后移动一位。

看,这样就完成了排序了! 

动态图展示 

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>//直接插入
void insert_sort(int* n, int length) {for (int i = 0; i < length; i++) {int temp = n[i];for (int j = i - 1; j >= 0; j--) {if (n[j] > temp) {n[j + 1] = n[j];n[j] = temp;}}}}
int main() {int array[10];srand((unsigned)time(0));for (int i = 0; i < 10; i++) {array[i] = rand() % 20;}for (int i = 0; i < sizeof(array) / sizeof(int); i++) {printf("%d ", array[i]);}printf("\n排序后:");insert_sort(array, sizeof(array) / sizeof(int));for (int i = 0; i < sizeof(array) / sizeof(int); i++) {printf("%d ", array[i]);}
}
//输出结果:
//9 16 13 4 8 12 2 0 7 2
//排序后:0 2 2 4 7 8 9 12 13 16

分析总结

时间复杂度

最好情况就是全部有序,此时只需遍历一次,最好的时间复杂度为O ( n );如果完全逆序的话,那么时间复杂度就会变为O(n^2),直接翻倍。所以时间复杂度为O(n^2) 。

空间复杂度

这里没有去开辟空间,空间是一个常量,所以空间复杂度是O(n).

稳定性 

 遇到相同大小元素过程中,依然是插入到相同元素的前边,相对位置没有发生改变,所以稳定性好。

二分法插入排序

 二分法插入排序是对插入排序的代码优化,整体的实质上还是插入排序,时间复杂度依然是不会改变的O(n^2),当n较大时,总排序码比较次数比直接插入排序的最坏情况要好得多,但比其最好情况要差。同样的,二分法插入排序是稳定的。

 

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
//二分法插入排序
void insert_bin_sort(int *n,int length) {int left, right, mid;for (int i = 1; i < length; i++) {left = 0;right = i - 1;while (left <= right) {mid = (left + right) / 2;if (n[mid] > n[i]) {right = mid - 1;}else{left = mid + 1;}}int temp = n[i];for (int j = i; j > left; j--) {n[j] = n[j - 1];}n[left] = temp;}
}
int main() {int array[10];srand((unsigned)time(0));for (int i = 0; i < 10; i++) {array[i] = rand() % 20;}for (int i = 0; i < sizeof(array) / sizeof(int); i++) {printf("%d ", array[i]);}printf("\n排序后:");insert_bin_sort(array, sizeof(array) / sizeof(int));for (int i = 0; i < sizeof(array) / sizeof(int); i++) {printf("%d ", array[i]);}
}
//输出结果:
//15 0 15 3 5 7 9 6 12 14
//排序后:0 3 5 6 7 9 12 14 15 15

以上就是今天的全部内容了,我们下一期再见!

分享一张壁纸: 

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

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

相关文章

RFID服装管理系统改善零售供应链

随着时尚零售业的竞争日益激烈&#xff0c;RFID技术正快速地改变着服装管理的方式。我们将探讨RFID服装管理系统的核心优点&#xff0c;以及如何在零售供应链中充分利用它。 首先&#xff0c;让我们了解一下RFID技术是什么。RFID是一种无线通信技术&#xff0c;通过使用RFID标…

国家网络安全周 | 金融日,一起 get金融行业数据安全

2023国家网络安全宣传周 热度一直在持续&#xff01; 9月15日是国家网络安全宣传金融日。 目前随着国际形势愈发严峻&#xff0c;金融机构基础设施的全面数字化升级&#xff0c;带来了全新的安全问题。数据安全不单是技术问题&#xff0c;更是已经成为一个关系社会稳定发展的…

【算法专题突破】滑动窗口 - 水果成篮(13)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;904. 水果成篮 - 力扣&#xff08;Leetcode&#xff09; 题目有很长一段话&#xff0c;但是我们读一遍题目可以提炼转化出题目的要求 &#xff1a; 其实就是找出一个最长…

数字IC验证23915--寄存器方法

文章目录 镜像值与期望值predication的分类自动预测显示预测 uvm_reg的访问方法寄存器健康检查![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1832ab43854068970bb5a66d851d06.png) 镜像值与期望值 寄存器模型中的每一个寄存器&#xff0c;都应该有两个值&#xff0c;…

我的C#基础

using System; namespace HelloWorldApplication }TOC 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。 为帮助您在CSDN创作的文章获得更多曝光和关注&#xff0c;我们为您提供了专属福利&#xff1a; 已注册且未在CSDN平台发布过…

ESIM实战文本匹配

引言 今天我们来实现ESIM文本匹配&#xff0c;这是一个典型的交互型文本匹配方式&#xff0c;也是近期第一个测试集准确率超过80%的模型。 我们来看下是如何实现的。 模型架构 我们主要实现左边的ESIM网络。 从下往上看&#xff0c;分别是 输入编码层(Input Ecoding) 对前…

网工内推 | 网络安全工程师,上市公司,13薪,食宿有补贴

01 苏州奖多多科技有限公司 招聘岗位&#xff1a;网络安全工程师&#xff08;安服渗透&#xff09; 职责描述&#xff1a; 1、负责客户网络安全攻击入侵事件溯源分析、处置等工作&#xff1b; 2、根据攻击告警/入侵事件&#xff0c;进行取证调查&#xff0c;攻击溯源反制&…

Jmeter系列-环境部署、详细介绍、安装目录介绍(1)

环境部署 官网下载Jmeter http://jmeter.apache.org/下载最新版本的 JMeter&#xff0c;解压文件到任意目录 安装JDK&#xff0c;配置Java环境 1、下载&#xff08;注意选择操作系统对应的位数32/64&#xff09; 官网 &#xff1a;http://www.oracle.com 2、安装&#xff0…

程序与保持健康的六个秘诀

虽然编程并不被视为是一个高危职业,但我们发现一大批数量惊人的开发人员正遭受健康问题的折磨。坐在办公桌很舒适,但有研究表明,它并不像你想象的那样健康。幸运的是,有很多非常容易做到的方法可以改善你的健康。 1.锻炼 尽管这可能是最明显的方法,但很多开发人员常常会…

变压器寿命预测(python代码,Logistic Regression模型预测效果一般,可以做对比实验)

1.数据来源官网&#xff1a;Data for: Root cause analysis improved with machine learning for failure analysis in power transformers - Mendeley Data 点Download All 10kb即可下载数据 2.下载下来后是这样 每一列的介绍&#xff1a; Hydrogen 氢气&#xff1b; Oxyge…

Virtualbox中Ubuntu根目录空间不足

现象 Virtualbox中Ubuntu根目录空间不足 解决 动态存储 虚拟机关闭先在虚拟介质管理里把硬盘Size调大开启Ubuntu用Disks或者GParted重新调整分区大小重新启动 步骤参考: https://zhuanlan.zhihu.com/p/319431032 https://blog.csdn.net/ningmengzhihe/article/details/1272…

VirtualBox宿主机和虚拟机文件互传设置

一、如图1、2、3步骤&#xff0c;设置共享粘贴板和拖放为双向 二、 在启动的虚拟机设置的里面&#xff0c;安装增强插件&#xff0c;然后重启虚拟机。 三、在网络位置就可以看到了

Business Objects单一报表升级为全套商业智能BI产品,探索更多平台与行业

从Crystal Reports到Business Objects 1994年的时候&#xff0c;Crystal Decisions还只有单一的报表产品Crystal Reports&#xff0c;也是全球第一个Microsoft Windows环境下的报表制作工具。 与微软的合作过程中&#xff0c;Crystal Decisions不断进行产品更迭&#xff0c;于…

[管理与领导-93]:IT基层管理者 - 扩展技能 - 5 - 职场丛林法则 -7- 复杂问题分析能力与复杂问题的解决能力:系统化思维

目录 前言&#xff1a; 一、系统化思维 VS 分解思维 1.1 系统化思维 1.2 分解思维 二、中医与西医思维模式的区别 三、正向闭环/正反馈 VS 负向闭环/负反馈 VS 开环 3.1 开环与管理 3.2 闭环与管理 3.3 生态系统是闭环系统 3.4 团队是一个闭环系统 3.5 正向闭环/正反…

华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

最优化:建模、算法与理论(典型优化问题

第四章 典型优化问题 4.1 线性规划 4.1.1 基本形式和应用背景 再次说明一下&#xff0c;其实这本书很多的内容之前肯定大家都学过&#xff0c;但是我觉得这本书和我们之前学的东西的出发角度不一样&#xff0c;他更偏向数学&#xff0c;也多一个角度让我们去理解 线性规划问…

STM32-HAL库06-硬件IIC驱动FM24CL16B非易失存储器

STM32-HAL库06-IIC驱动FM24CL16B非易失存储器 一、所用材料&#xff1a; STM32VGT6自制控制板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 二、所学内容&#xff1a; 通过HAL库的硬件IIC对FM24CL16B存储器进行写与读取操作。 三、CUBEMX配置&#xff1a; 第一步…

【Cocos Creator 3.5实现赛车游戏】10.实现汽车节点的运动逻辑

转载知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff0c;知识变现的工具 项目地址&#xff1a;赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码&#xff0c;基于Cocos Creator 3.5版本实现 上一节的学习后&#xff0c;您已经完成了对汽车节点的控制逻…

四川玖璨电子商务有限公司:短视频运营理解

短视频运营是一种通过策划、执行和管理短视频内容以达到品牌目标的一项工作。在如今面临信息爆炸的时代&#xff0c;短视频已经成为了吸引用户注意力的一种重要方式。作为一种新兴媒体形式&#xff0c;短视频拥有跨时空、生动有趣、内容丰富的特点&#xff0c;因此得到了越来越…

华为云云耀云服务器L实例评测|云耀云服务器购买流程与功能介绍

目录 概述什么是云耀云服务器L实例功能概述 技术参数处理器和内存存储和网络GPU加速 强大的计算能力高性能计算集群大规模并行计算 灵活可扩展的存储本地SSD存储产品购买流程 概述 什么是云耀云服务器L实例 云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新…