算法学习笔记之插入排序

算法学习笔记:插入排序的边界条件与调试技巧 插入排序是排序算法的“入门必修课”,它的逻辑符合人类直觉(类似整理手牌或书架),但细节处的边界条件(如循环终止条件、数组索引越界)常让新手头疼。本文聚焦“边界条件”与“调试技巧”两大核心,覆盖插入排序的完整实现流程,适合想彻底搞懂这一算法的初学者。本文将从生活案例引出插入排序原理→拆解核心步骤→分析常见边界错误→用代码实战演示调试技巧→总结避坑经验,最后通过思考题巩固理解。插入排序:通过逐步扩大有序区,将待插入元素插入到正确位置。内层循环:负责找到待插入元素的位置,通过比较和移动元素实现。边界条件。 阅读详情

用插入法进行排序

练习步骤:

1. 先生成一个随机的数组

2. 用插入法进行排序


#include <iostream>
#include <stdlib.h>
#include <vector>

using namespace std;

int findInsertPlace(vector<int> v, int value);

int main(){
    //先生成一个随机数组, 数组长度为N, 元素为100以内的随机整数
    int N;
    cout << "输入你想排序的随机数组的长度: ";
    cin >> N;
    int randomList[N];
    for(int i = 0; i < N; i++){
        randomList[i] = rand()%100;
    }

    cout << "生成的随机数组如下: " << endl;
    for(int i = 0; i<N;i++){
        cout << randomList[i] << " " ;
    }
    cout << endl;

    cout << "下面我们用插入法进行排序" << endl;
    vector<int> sortedResult;
    sortedResult.push_back(randomList[0]);
    for(int i = 1; i< N; i++){
        int insertPosition = findInsertPlace(sortedResult, randomList[i]);
        sortedResult.insert(sortedResult.begin()+insertPosition,randomList[i]);
    }

    cout << "排序后的数组为:" << endl;
    vector<int>::const_iterator it;
    for(it=sortedResult.begin(); it!=sortedResult.end(); it++){
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

int findInsertPlace(vector<int> v, int value){
    //这里假定V是已经按从小到大排好序的向量,该函数要找出value可以插入的位置
    int result = 0;
    if(value >= v[v.size()-1]) result = v.size();
    if(value < v[0]) result = 0;
    for(int i=0; i<v.size()-1;i++){
        if(value >= v[i] && value <= v[i+1]){
            result = i+1;
        }
    }
    return result;
}


编译运行的结果如下图所示:


vivado运行时报错 license文件更新操作 vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy 阅读详情

相关推荐

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

C++学习笔记【算法】——插入排序算法

插入排序是一种,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。类似于整理扑克牌的过程。

note_mushrooms的博客 1134

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查)

本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。

p1q2r的博客 586

算法学习笔记之插入排序算法

接下我们介绍下一种排序算法: 插入排序 插入排序算法通过比较和插入来实现排序,其排序流程如下: 1)首先对数组前两个数据进行从小到大排序 2)接下来将第3个数据与排好序的两个数据进行比较,将第3个数据插入合适的位置 3)然后,将第4个数据插入到排好序的3个数据中 4)直到...

chenghunpeng8091的博客 217

飞书文档API深度使用指南:如何用n8n社区节点绕过HTTP Request的复杂配置

本文详细解析了如何利用n8n社区节点简化飞书文档API的集成过程,绕过复杂的HTTP Request配置。通过n8n-feishu-lite社区节点,开发者可以轻松实现飞书文档的创建、编辑和查询操作,大幅提升自动化工作流的效率。文章还提供了高级应用场景和性能优化建议,帮助开发者更好地利用飞书开放平台的API功能。

weixin_29227585的博客 83

数学概念 | 旋转矩阵、欧拉角、四元数

旋转矩阵、欧拉角、四元数概念及相关运算;

NapoleonCoder的博客 772

算法导论学习笔记——插入排序

/** * 用递归的方法实现的插入排序算法 * 分解:n个元素的排序看成是把第n个元素插入到已排好序的n-1个元素中 * 解决:对n-1个元素以次递归 * 合并:用插入排序将第n个元素插入到排好序的n-1个元素序列中 */ public class InsertSort

FG2006的专栏 1408

新手如何学习车载底层嵌入式软件开发(AutoSar)

汽车嵌入式开发

ACarSoft的博客 4221

学习笔记之算法--插入排序

/** * 插入排序:将数组第一个数作为有序数组,后面的数据依次往有序数据中插入 * 稳定排序 */ public static void insertSort(int[] arr){ System.out.println("插入排序前:" + Arrays.toString(arr)); for(int i=1;i < arr.length;i++){ ...

书山有路情为径 198

MTK Android 12 Clone Project 克隆项目

本文介绍了如何使用MTK Android 12 Clone Project 克隆一个新的项目。通过使用绝对路径执行Perl脚本,并根据需要选择升级或降级位数,可以成功地生成一个新的项目并进行编译。希望本文对xdm有所帮助。

我其实什么都不会 942

在 SAP S/4HANA 里把 OData Client Proxy 用顺手,借助 Service Consumption Model 2.0 提前打通远程 OData 调用

摘要:本文探讨了在SAP S/4HANA集成开发中调用外部OData服务的解决方案。传统ABAP代码直接调用方式存在诸多不便,而OData Client Proxy提供了更稳定的途径。文章详细介绍了如何通过Service Consumption Model 2.0在SAP BTP生成模型类,并将其移植到SAP S/4HANA进行适配改造,最终注册为可用的OData Proxy Client。该方法适用于较新版本的SAP S/4HANA系统,通过源码替换实现模型转换,为系统集成提供了高效的类型安全调用方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1092

插入排序算法学习——算法导论学习笔记

今天第一次写算法的笔记,从今天开始正式步入学习算法的行列。白天的时间保质保量的把工作完成,然后就是开始学习unix环境高级编程,还有就是算法了。学习要思考,要总结,才能有收获。回归正题。 插入排序  来一个例子排序的过程如下:给定无需序列:(3,6,9,7,1,8,2,4)

wintree的专栏 1230

【Unity】【2D】用连续图片生成动画Animation的简明步骤

本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。

O青草O的博客 Unity和游戏制作知识分享 718

算法学习笔记:1.插入排序

算法学习第一站:插入排序 插入排序是算法学习的第一站,简单来讲就是遍历数组,将数插入到比它小的数后面,而之前已经排序过的数组中比此数大的部分向后移一位 问题: 将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。 #include<iostream> using namespace std; int main() { int n,N[1000000],key,k;/*创建了一个足够大的数组,我建的这么大主要是因为我练习的是一道快速排序的题,输入规模比较大,但最终还是有两个TEL*

weixin_45343834的博客 203

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【算法练习】29:插入排序学习笔记

插入排序的算法思想,插入排序的算法步骤,基于Python的插入排序实现。

qq_39780701的博客 341

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[算法学习笔记]排序——插入排序

插入排序 插入排序是最简单的一种排序方法,对于少量的数据排序是十分有效的。插入排序十分容易理解,平时玩扑克时,在理牌的过程中就是使用了插入排序的思想。 可以通过这张图片来直观的了解 下面是一张插入排序的动态图。 下面使用c语言来实现这一算法 #include <stdio.h>void insertionSort(int [], int);int main(){ int num

Salvation 517

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

算法学习笔记--插入排序

插入排序:将每一个元素插入到其他已经有序的数组的适当位置。为了给插入的元素腾出空间,需要将其余所有元素在插入之前都向右移动一位。插入排序也很简单,java代码如下:/** *插入排序 */ public class Insertion { public static void sort(int[] a){ int N = a.length; for (int

一叶知秋_11的博客 484

《算法导论学习笔记》--插入排序

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

weixin_43731163的博客 177

算法学习笔记——选择、冒泡、插入排序

算法学习笔记——选择、冒泡、插入排序。

luck_lsj的博客 467

[学习笔记]排序算法之插入排序

插入排序       插入排序法的排序思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,所以只是要从右向左找到比插入点(下面程序中的insertNote)小(对升序而言)的第一个数组元素就插入到其后面.直到将最后一个数组元素插入到数组中,整个

[ 风少爷] 301

小菜鸟的算法导论学习笔记——插入排序

小菜鸟也开始写文章了w,非科班,个人基础属于是很久以前上过了C++与数据结构的课,大部分东西都忘了,近期想学习编程,经同学推荐开始学习基本的算法知识,以下内容均来自于《算法导论》。1、24行的auto key可以改为int,如果是int类型的数据排序的话,但是如果换成。2、用数组的形式会显得更加简洁,但不足之处在于无法控制数组的大小。2、25行与第j个元素对比的。例题1、插入排序的实现。

xyxiaoyuan的博客 130
上一篇: 算法学习笔记之寻找第1500个丑数
下一篇: 使用tensorflow对Mnist数据集进行字体识别
a_step_further
博客等级 码龄11年 119粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值