插入排序-InsertSort

排序算法 -- 插入排序(InsertSort) 一、插入排序思想 插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。 二、插入排序图示 三、java 编写代码 package point... 阅读详情

插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

插入排序步骤:
1.在有序序列中查找插入点
2.从插入点开始向后移动数据(1、2可合并,边查找边移动数据)
3.插入数据

插入排序根据查找插入点方法不同分为:直接插入排序和二分插入排序。

代码

直接插入排序:

class InsertSort {
    public:
        void insertSort(vector<int> &nums){
            int length=nums.size();
            int i,j,tmp;
            for(i=1;i<length;i++){
                tmp=nums[i];
                for(j=i-1;j>=0 && tmp<nums[j];j--){ //tmp比较必须合并到j>=0
                    nums[j+1]=nums[j];
                }
                nums[j+1]=tmp;
            }
        }
    };

时间复杂度:O(n^2)

二分插入排序:

查找插入点时,使用二分查找。

class BinarySearchInsertSort{
public:
    void binarySearchInsertSort(vector<int> &nums){
        int length=nums.size();
        int i,j,p,value;
        for(i=1;i<length;i++){
            value=nums[i];
            p=binarySearchInsertPosition(nums,i,value);
            for(j=i;j>p;j--){
                nums[j]=nums[j-1];
            }
            nums[j]=value;
        }
    }
    int binarySearchInsertPosition(vector<int> &nums,int length,int value){
        int low=0,high=length-1,mid;
        while(low<=high){
            mid=low+(high-low)/2;
            if(value<nums[mid]){
                high=mid-1;
            }else{
                low=mid+1;  //当value>=nums[mid],low=mid+1,保证排序稳定性
            }
        }
        return low;     //返回low
    }
};

时间复杂度:查找插入点需要Θ(log i)比较;移动数据最多移动i+1次,最少2次。(查找插入点开销减少了,但是对没有减少总开销数量级)
所以时间复杂度:还是O(n^2)

两种插入排序是稳定的排序。

2023东华大学机试OJ进阶版1-81题 先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。 阅读详情

相关推荐

使用LogisticRegression和LightGBM模型对信贷违约进行预测----基于kaggle比赛数据

3.分离数值型变量与类别型变量,发现有些数值型变量因为输入不规范,比如数值中含有字符(28_,_10000_等)被划分为类别型变量 ,比如 'Age','Annual_Income','Num_of_Loan', 'Num_of_Delayed_Payment', 'Changed_Credit_Limit','Credit_Mix','Monthly_Balance', 'Outstanding_Debt' ,'Amount_invested_monthly'等。三、分箱,woe编码,计算IV值。

I_am_a_big_tiger的博客 1682

InsertSort(插入排序)

 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到{\displaystyle O(1)}的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 算法思想就是不断与前面的数据比...

weixin_42349313的博客 7644

【时空数据分析#06】实战:基于Python与ArcGIS的NDVI长期趋势制图与分级

本文详细介绍了基于Python与ArcGIS进行NDVI长期趋势制图与分级分析的完整工作流。通过整合MODIS卫星数据,利用ArcGIS进行空间处理与栅格转换,结合Python进行时序统计与趋势计算,最终生成直观的植被变化趋势分级图,为生态评估与环境监测提供可靠的空间分析工具。

lilh34434的博客 477

插入排序(InsertSort)

对于一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、元素个数加1的有序数组,算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。

安正勋的博客 2052

219页华为供应链管理:市场预测S&OP计划、销售预测与存货管理精要

S&OP计划的整合作用:S&OP是一种综合的销售和运营计划流程,它将市场预测、生产能力、库存水平和财务目标整合在一起,以确保企业能够平衡供需,实现最佳的运营效率。持续监控与改进:市场预测、S&OP计划、计划委员会的决策以及存货管理都需要持续的监控和评估。供应链策略与执行:华为ISC拥有清晰的供应链策略,并通过SISC架构实现了策略的有效执行,包括供应链网络设计、库存管理、物流优化等。持续的供应链创新:华为ISC不断探索新的供应链管理方法和技术,如数字化供应链、智能物流等,以适应全球化和市场的快速变化。

zuoan1993的博客 2433

等保: Postgresql配置ssl链接

等保: postgresql配置ssl链接完整方案和避坑指南

weixin_43557605的博客 4382

【排序算法全解】之 - 插入排序(InsertSort)

1.算法原理 把第一个元素当成有序序列,然后把待排序序列的第一个值插入到有序序列中 下图蓝色方框里就是有序序列 2.分析过程和代码实现 2.1.排序趟数 由于是从第二个元素开始插入到有序序列,因此排序趟数为 n-1 2.2.每趟排序过程 每趟排序取待排序序列的第一个元素 ,从后向前依次与有序序列的值进行比较,若小于有序序列的值,则交换该两者交换,当有序序列的值小于该元素时,完成插入 例如排序数组 [5,2,3,4,1] 的过程如下图 按上述算法所编写的代码...

weixin_44882124的博客 3639

生信人的一天~HIFI数据+HIC数据组装基因组

HIFI+HIC数据组装基因组!

qq_43337286的博客 9530

算法实现 - 插入排序(Insert sort) - 理解版

一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序适用于小规模数据集或部分有序的数据,且实现简单,具有较低的常数因子。 不过对于大规模数据集,通常会选择更高效的排序算法,如快速排序或归并排序。

oschina_41731918的博客 1474

开篇词:学习系统分析师的好处?核心考点有哪些?

系统分析师备考指南 系统分析师是IT行业的高级专业人才,具备系统分析与设计能力,能指导开发团队工作。学习系统分析师不仅能获得职业晋升的"黄金跳板",还能全面提升技术架构思维和业务理解能力。 核心价值: 职业发展:晋升管理岗位的硬性要求,突破职业天花板 能力提升:构建T型知识结构,培养架构思维和软技能 市场竞争力:成为"业务+技术"桥梁,获得国家级专业认证 考试内容: 计算机基础知识(硬件、操作系统、网络等) 系统分析专业知识(软件工程、架构设计等) 进阶知识(企业信息

数据知道的博客 5942

基于 Verilog 的经典数字电路设计(10)三态门

三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

新芯设计的博客 1万+

插入排序InsertSort

/** *插入排序思路:O(n^2) * 最外层一个循环,从第二个数到最后一个,变量为i * 每个数存储在key变量中 * 变量j,是左边已经排好序的数组的上限 * 判断key与前面每一个数比较 1,3,5,2,4,6,8,5,9,10 * 《-------...

a5590649的博客 142

YOLOv8改进 | 融合篇,YOLOv8主干改进融合网络之MobileNetV3+CA注意机制,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。YOLOv8中的主干网络替换成MobileNetV3+引入CA注意机制

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1882

算法 - InsertSort [插入排序]

#include<iostream> #include<cstring> using namespace std; //1,2,3,4,5,4.5 // k //插入排序 void insertsort(double a[],int k){ if(k==0) return ; insertsort(a,k-1); //对前k-1个元素排...

ଳxin的博客 322

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

插入排序insertSort

i++){

Y20021219的博客 109

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

插入排序insertsort

`range(1, len(arr))`: 生成从1到数组长度减1的数字序列。- 插入 `key` 到 `arr[j + 1]`,即 `arr[0] = 11`,数组变为 `[11, 12, 13, 5, 6]`- 插入 `key` 到 `arr[j + 1]`,即 `arr[0] = 5`,数组变为 `[5, 11, 12, 13, 6]`- 插入 `key` 到 `arr[j + 1]`,即 `arr[1] = 6`,数组变为 `[5, 6, 11, 12, 13]`我们来一步步分析这两种情况。

cocofu的博客 800

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

insertSort插入排序

import java.util.Arrays; import org.junit.Test; public class insertSort { public static void main(String[] args) { int[] a = {5, 4, 3, 2, 1}; sort(a); System.out.println(Arrays.toString(a)); } @Test public static int[] sort(int[] a) { for(int

qq_48974601的博客 124

插入排序-insertsort

插入排序-insertsort

Walking on the clouds 604

排序——插入排序InsertSort

插入排序 核心思想 将待排序数据分成两部分,一部分有序,一部分无序,将无序部分依次插入到有序部分 代码 void InsertSort(int arr[],int nlength) { if(arr == NULL || nlength <= 0) return; //默认第一个元素有序 //没有交换只有放入 有倒叙遍历有序数组的过程 int i; int j; int Temp; // 趟遍历无序元素(默认有序数组为空-1位置) for(i = 0 ; i < nlength

qq_42766309的博客 248

数据结构-插入排序InsertSort

多数情况下:插入排序在简单排序中是最好的一种,虽然算法需要的时间仍然是O(N^2),但是一般情况下比冒泡排序快一倍,比选择排序要快,但是插入排序要麻烦一点,但是它常用在较复杂的排序的最后阶段。 概念:对于给定的一组随机数据,初始时假设第一个记录自成一个有序序列,其余为无序的,从第二个记录开始,按照记录的大小一次将当前处理的记录插入到之前的有序序列,直到最后一个为止。              

皮蛋小粥的博客 373

JAVA插入排序InsertSort

插入排序的思想 插入排序的思想即将初始数组分为有序数组和无序数组,将无序数组中的值,依次插入有序数组中。起始有序数组为数组中的第0个元素,即arr[0],无序数组为arr[1]~arr[n]。取无序数组中的arr[1],与arr[0]比较,若arr[1]&amp;lt;arr[0],则将arr[1]插到arr[0]之前;反之,则不需要执行插入动作;完成插入后得到新的有序数组。同理,取无序数组中的arr[2...

qq_27442847的博客 244

【插入排序——InsertSort】 稳定排序

假如一个数组只有1个元素,那么这个数组就已经是有序的了; 假如这个数组有2个元素,那么就把a[1]当做是比较数temp,比较a[0],如果a[1]<a[0],那么就将a[0]右移一位(从小到大排序),接着在位置0插入temp; 假如这个数组有3个元素,那么就把a[2]当做是比较数,比较a[0],a[1],如果a[2]<a[1],那么就将a[1]右移一位(从小到大排序),如果a[0]...

piano_diano的博客 327

插入排序InsertSort-注意a[i]值的变化

在前面的几篇博客中,我们已经简单地探讨过冒泡排序、选择排序和快速排序了,今天,让我们来聊聊插入排序insertSort。 插入排序,顾名思义,就是在合适的地方插入元素,使得数组由小到大(由大到小)排列。 代码实现如下: void InsertSort(int a[],int count) { int i,j; for(i = 1;i < count; i ++) //第一次循环将0-1作为“有序区,使得a[0]和a[1]按从小到大的顺序排列 { //之后每次循环将”有序区“向后扩展

u014183815的博客 463

插入排序 insertsort

【代码】插入排序 insertsort。

weixin_73598089的博客 434

插入排序 InsertSort

插入排序的策略是:第i-th 循环,选定A[i],把它插入到A[1]~A[i-1]中去。 注意,这里的A[1]~A[i-1]是按从小到大顺序排好的了。 i 从2 开始,注意A[]的下标是从1~n,共有n个元素。 template void InsertSort( Type A [ ], int n ) { for( int i = 2 ; i <= n ; i++ ) {

暗香浮动·月黄昏 640

InsertSort(插入排序)

先上图,看图比较容易理解: 过程分析 1.选择一个元素构建一个已排好序的数组,这里为了方便选择第一个元素,(此例中黄色区域为以排好序的数组 ) 2.然后让未排序部分的第一个元素k与已排好序中最后一个元素sorted[i]开始比较大小: 1).如果k >= sorted[i] , k加入到已排序数组后面。 2).如果k < sorted[i] , k继...

c++ 中的符号-> 997
上一篇: leetcode 154 : Find Minimum in Rotated Sorted Array II
下一篇: 选择排序-SelectionSort
HelloCooper
博客等级 码龄11年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值