【唐老狮】排序——插入排序

【唐老狮】C#——多态和vob ​​截止目前,我们已经学会了面向对象中封装和继承两大特性的相关知识点。简单理解它们,封装就是用代码形容一个现实对象,继承就是复用代码,通过继承可以让类之间建立父子关系,复用一些特征和行为。 ​​那么,我们接下来要继续学习最重要的一个特性——多态。 【多态】 概念 同一类型对象 执行相同行为 有不同的表现 为什么要学习多态? ​​根据多态的概念,很多同学可能会写出如上的代码,子类中重新实现一个SpeakName的方法,前面加一... 阅读详情

【插入排序】


【基本原理】

两个区域

排序区

未排序区

用一个索引值来区分

未排序区元素

与排序区元素比较

插入到合适位置

直到未排序区清空

图片

 

排序开始前,首先认为第一个元素在排序区中,其它所有元素在未排序区中。

排序开始后,每次将未排序区第一个元素取出用于和排序区中元素比较。如果满足条件(较大或者较小),则排序区中元素往后移动一个位置。

注意

所有数字都在一个数组中

所谓的两个区域是一个分水岭索引


【关键逻辑】

循环n-1次

有n个数就循环n-1次

 


每一轮

取出未排序区的第一个元素

得到排序区最后一个元素的索引位置

 

第一轮

未排序的第一个元素

noSortNum = 7

排序区的最后一个元素索引

sortIndex = 0

 

第二轮

noSortNum = 9

sortIndex = 1

以此类推


确定插入位置

 

用未排序区第一个元素

从已排序区最后一个元素开始

依次往前比较

如果满足条件

已排序区元素往后移动一个位置


插入数字

 


【标准实现】

 

排序结果

 

【逻辑分析】

-为什么有两层循环-

第一层循环

依次取出未排序区的元素进行排序

第二层循环

找到想要插入的位置

-为什么第一层循环从1开始遍历-

 

插入排序的关键是分两个区域

已排序区

未排序区

默认第一个元素在已排序区

每一轮循环的目的是

依次取出未排序区的元素进行排序

-为何用while循环-
 

之前学习的冒泡排序和选择排序,之所以第二层循环是for循环,是因为它们每一轮都需要和数组中剩下的所有元素进行比较,不存在中途停止循环的情况。而插入排序,在比较过程中,只要条件不满足就马上要停止比较,所以while循环更适用!(当然用for循环也是可以实现的)

满足条件才比较

否则证明插入位置已确定

不需要继续循环

-为什么可以直接往后移位置   为什么后移结束要减减-

 

每轮未排序数已记录

最后一个位置不怕丢

 

减减比较下一数

以此类推找位置

 

​-为什么确定位置后  是放在sortIndex + 1的位置-

 

 

接着会进行比较

 

这时sortIndex = 0,而3小于4所以不会再进循环了,因此循环结束,证明4应该放在1的位置,也就是sortIndex + 1的位置。所以这里的逻辑总结一下就是:当循环停止时,插入位置应该是停止循环的索引加1处!

-如何降序排列-

 

升序(从小到大)

降序(从大到小)

具体是哪种排序

关键点就是条件表达式

如果是大于(>)

已排序数大于未排序数

则进入循环继续往前找

也就是要把小的数往前放

结果就是升序排序

如果是小于(<)

已排序数小于未排序数

则进入循环继续往前找

也就是要把大的数往前放

结果就是降序排序

 


【练习】

之前的冒泡排序和选择排序,我们都知道他们是没有固定写法的,可以从前往后遍历,也可以从后往前遍历。而插入排序也是没有固定写法的,目前我们实现的是默认第一个为已排序区元素,如果你对插入排序已经了解了,可以自己尝试实现默认最后一个元素为已排序区元素,来实现插入排序。


 

【总结】
 

-基本原理-

两个区域

用索引值来区分

未排序区与排序区

元素不停比较

找到合适位置

插入当前元素

-套路写法-

两层循环

一层获取未排序区元素

一层找到合适插入位置

第一个未排序元素值

最后一个已排序元素索引

用未排序元素值

依次遍历比较已排序元素

找到合适位置

第二层循环外插入

-注意事项-

默认开头已排序

默认结尾已排序

第二层循环外插入


关注唐老狮获取更多干货内容

 

零经验小白的独游历程——U3d学习经验与教程分享 前言 U3D作为主流引擎,网上的教程可以说是不计其数。但是程序是一种模式化的思维,引擎也有他的底层原理。网上很多网课只是一步一步地展示做法,看似实现了效果,但其实根本没有说清楚背后的原理。我们就算跟着做了一遍,也只是熟悉了引擎的基本操作,但是如果想要自己做点什么效果,便会问题百出。 比如说一开始我们打的第一行Unity代码一般都是控制玩家移动的。这时勤劳好学的我们一定会跟着老师一起打下这行代码。 void FixedUpdate() { rb.MovePosition(transform.p 阅读详情

相关推荐

Unity Shader入门 - 必备概念 唐老师教程 笔记

什么是渲染管线?渲染管线(渲染流水线)它是计算机图形学中用于将三维场景转换为最终屏幕图像的过程它是由一系列的阶段和操作组成的,每个阶段都负责执行特定的任务逐步处理输入的集合数据和纹理信息最终生成可视化图像的过程简单理解:渲染管线(流水线)就是将数据分阶段的变为屏幕图像的过程渲染管线中的数据指的是什么?渲染管线(流水线)是:将数据分阶段的变为屏幕图像的过程这里的数据指的是:1.:模型的顶点坐标、法线向量、纹理坐标等等2.:纹理贴图等3.:光照参数、光源信息等。

z2014z的博客 1842

经典树型表结构之SORT_NO

为什么80%的码农都做不了架构师?>>> ...

weixin_34049032的博客 720

【唐老狮】C#——万物之父中的方法

知识点回顾 万物之父 关键字 object 概念 object是所有类型的基类 它是一个类(引用类型) 作用 可以利用里氏替换原则 用object装所有对象 可以用来表示不确定类型 作为函数参数类型 选中输入的object 按F12或者右键转到定义 ​​我们可以看到作为万物之父的object本质上就是一个Object类,里面有2个静态方法,3个虚方法,2个普通成员方法。其中对于我们来说,常被我们重写和使用的就是ToString方法...

MrTang_Unity的博客 1463

《Unity3d实战就业路线》

唐老狮《Unity3d实战就业路线》课程 市场上缺少专门围绕核心路线设计的成体系的unity课程。本套餐完整统一的unity3d学习路线,统一的老师与内容设计。内容难度层层推进,核心能力养成无死角 适合什么学员? ·接触unity不久,需要系统的学习 ·不知道如何从头到尾,系统学习掌握unity ·学过少量或很多散课,但不得要领,不知如何选课 ·希望扎实掌握c#和unity,成为有能力可就业的开发者 就业路线套餐包括以下模块课程: 1、C#语言教学四部曲 + 实践四部曲 2、U..

zzc168zzc的博客 3725

【唐老狮】面向对象——概念

【面向对象】 万物皆对象 用程序来抽象(形容)对象 面向对象的思想来编程 ​​面向对象编程(Object Oriented Programming,OOP),它是一种主流编程思想。 ​​面向对象编程的思想很简单,最简单的套路是用中文去形容一类对象,把一类对象的共同点提取出来,然后用程序语言把它翻译过来,带着对象的概念在程序中使用它们。 ​​就好像我们在下一盘棋,各个棋子就是一个个的对象,他们各司其职,我们只需要在程序中控制使用它们...

MrTang_Unity的博客 565

利用C#实现贪吃蛇

不应该强迫别人依赖他们不需要使用的方法,一个接口不需要提供太多的行为,一个接口应该尽量只提供一个对外的功能,让别人去选择需要实现什么样的行为,而不是把所有的行为都封装到一个接口当中。②为了能在此类中调用ChangeScene函数,特将Game类中的ChangeScene函数设为static,由于静态方法中不能调用成员变量,则将nowScene也设为静态变量。例如:飞行接口、走路接口、跑步接口等等虽然都是移动的行为,但是我们应该把他们分为一个一个单独的接口,让别人去选择使用。

K_CRACKING的博客 1700

唐老狮C++基础 笔记

typedef原变量名 新类型名 比如 typedef bool bbb;别名的意义 代替复杂的,不方便书写和记忆的基本类型,提高高代码的可读性。

2303_76778520的博客 979

泰课Unity3D基础班视频教程

泰课Unity3D基础班视频教程 百度云下载 很适合初学者的Unity3D视频教程 非常详细

唐老狮 UGUI 实战学习笔记(2)

嘻嘻

咩咩的博客 627

唐俊飞唐老师CISSP2018最新全套培训讲义

唐俊飞唐老师CISSP的培训讲义,有学习的可以参考下,也可以报名唐老师的培训班,讲得很好,很细。

nbiot和2g_浅谈NBIOT

一、什么是NBIOT?1、概念窄带物联网(Narrow Band Internet of Things, NB-IoT),NB-IoT构建于蜂窝网络,只消耗大约180KHz的带宽,使用License频段,可采取带内、保护带或独立载波等三种部署方式,与现有网络共存。可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。2、NBIOT的特点和目标(1)超强覆盖:相对GPRS来...

weixin_39534100的博客 1704

【唐老狮】C#四部曲之C#入门:习题汇总

本篇文章对视频教程 《【唐老狮】Unity系列之C#四部曲—C#入门》 当中的课后练习题进行了汇总,方便同学们统一进行练习和复习 这些习题的解题部分都在本教程中以视频的形式进行了详细讲解 B站免费试看 【唐老狮】Unity系列之C#四部曲—C#入门_哔哩哔哩_bilibili 泰课会员免费看: https://www.taikr.com/goods/show/589 本套课程属于Unity实战就业路线(打折预售中) https://www.taikr.com/goods/show/5.

MrTang_Unity的博客 4587

达芬奇Pro开发板硬件验证全流程指南

FPGA开发板硬件验证是嵌入式系统可靠性的基石,其核心在于理解SoC启动时序、IO资源映射与高速接口物理层约束。基于Xilinx Zynq-7000异构架构的开发平台,需围绕电源完整性、时钟稳定性、信号完整性及软硬协同启动链路展开分层测试。技术价值体现在规避量产失效率、支撑高可靠工业控制与实时图像处理等场景。典型应用涵盖千兆以太网通信验证、DVP摄像头与RGB LCD显示链路调试、以及SFP+光纤接口PRBS误码率测试。本文聚焦达芬奇Pro系列开发板,深入解析JTAG下载、QSPI Flash重烧录、RGM

weixin_42453228的博客 122

页面拖动图片排序后更新表中顺序字段

需求: 数据库表结构中有sortno这个排序字段,当页面拖动,更改排序顺序后,调用更改排序接口,将目前顺序的copid(图片id)以逗号”,”分割,传到后台,后台将排序字段更新,列表按照新的顺序进行排列 实现方案: 将传过来的copid串进行解析,存到数组中,传给xml,并进行批量修改,更新数据库表中的排序字段。 补充:mybatis中foreach标签的使用 <foreac...

single0515的博客 1190

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 716

fastbin attack快速入门

0x01 fastbin简介 Fastbin包含0x20~0x80大小bin的数组指针,用于快速分配小堆块。fastbin按照单链表结构进行组织,相同大小的bin在同一个链表中,fd指向下一个bin,采用LIFO(Last In First Out)机制。在fastbin中,堆块的inuse标志都为1,处于占用状态,防止chunk释放时进行合并,加快小堆块的分配。 正常fastbin的使用 通过这个简单的案例来了解fastbin的单链表结构,malloc和free的过程。 #include<stdio

abelxu 1571

唐老狮-unity-c#-4-进阶

目录ArrayList:object数组Stack:栈:先进后出的object数组Queue:队列:先进先出的object数组Hashtable:散列表:KV结构的object数组泛型:参数变量化泛型约束:参数变量化加一点限制List:泛型数组Stack:泛型栈Queue:泛型队列Dictionary:泛型KV结构的数组,v>顺序存储和链式存储LinkedList委托:装函数的容器事件:外面只能往里装函数的安全型委托匿名函数:lambda表达式:()=>{} 不想取名的函数List排序协变逆变多线程:你干你

u011549406的专栏 704

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6571

C#入门--学习记录

集成开发环境,编程软件。

nana_7654321的博客 2131

C#上位机与OneNET云平台数据交互实战——基于HTTP与JSON解析

本文详细介绍了使用C#开发上位机软件与OneNET物联网云平台进行数据交互的实战方法。通过构建HTTP请求、解析JSON数据,实现设备数据的实时获取、界面展示与本地存储,为工业监控与数据采集提供了一套完整高效的C#解决方案。

kkk56的博客 218

手把手教你学 GPU SoC 芯片(9.3)--GPU SOC 功耗和热管理的动态电压和频率调整(DVFS)

通过动态电压和频率调整(DVFS),可以有效地管理GPU SoC的功耗和热管理。合理的DVFS策略不仅可以节省功耗,提高能效,还可以延长设备的使用寿命。

MHD0815的博客 1498

【唐老狮】Unity和UE4两大游戏引擎,你该如何选择?

客观分析Unity和UE4两大游戏引擎,对于初学者我们应该如何选择

MrTang_Unity的博客 2万+

PMSM控制系列文章进阶-8.电流、角度采样及其同步

摘要:本文分析了高低压电机在电流和角度采样中的不同方案选择。高压电机采用霍尔传感器和旋变进行隔离采样,低压电机则使用shunt电阻和磁编码器以降低成本。重点讨论了采样时间补偿问题:电流采样需与PWM周期同步,角度采样需考虑传感器延迟;通过park变换和反park变换时需补偿采样与发波的时间差,提出了通过测试母线电流或Ud变化来验证补偿时间准确性的方法。文中还介绍了对传感器信号进行软解码处理的方法,包括消除直流偏置、增益误差和正交误差等参数的自学习过程。

weixin_41343701的博客 613

唐老狮Unity入门笔记

1. Inspector窗口中的变量关联的就是对象的成员变量,运行时改变他们就是在改变成员变量。2.拖拽到GameObject对象后,再改变脚本中变量默认值,界面上不会改变。3.运行中修改的信息不会保存(可以copy后paste)让自定义类型可以显示编辑。大部分类型都能显示编辑。

m0_61939767的博客 2543

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Unity游戏工程师学习路线(唐老狮)

最后的最后我想说,坚持就有可能成功!加油,相信自己一定能行!

weixin_66584806的博客 971

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java自定义注解导入和导出合并一对多单元格工具类

excel工具类对poi的封装,所以需要导入poi的依赖,我用的是4.1.0版本,如果是4以下,工具里面的poi的相关api需要改变; 导入/导出支持:一对多合并(不限制层级数,但每个类只能有一个子集)、必填字段检测(读取的时候能用到)、排序(导出能用到)、动态隐藏字段(导入导出会忽略该字段) 创建注解IExcel注解 name : 用作excel列名isSon :用作判断是否是子集(默认false,如果有子集,在子集成员变量上标注: @IExcel(isSon = true))hiddenField

weixin_44947862的博客 2169

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

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

上一篇: 【唐老狮】排序——选择排序
下一篇: 【唐老狮】排序——快速排序
一唐老狮一
博客等级 码龄5年 507粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值