C#核心知识回顾——19.插入排序

1.插入排序的基本原理

871542639
两个区域
排序区 未排序区
用一个索引值做分水岭
未排序区元素
与排序区元素比较
插入到合适位置
直到未排序区清空

cs 复制代码
int[] arr = { 8, 6, 7, 2, 9, 4 };
        //第一步
        //能取出未排序区的所有元素进行比较
        //i=1的原因:默认第一个元素就在排序区
        for (int i = 1; i < arr.Length; i++)
        {
            //第二步
            //每一轮
            //1.取出排序区的最后一个元素索引
            int sortIndex = i - 1;
            //2.取出未排序区的第一个元素
            int noSortNum = arr[i];
            //第三步
            //在未排序区进行比较
            //移动位置
            //确定插入索引
            //循环停止条件:
            //1.发现排序区所有元素比较完
            //2.发现排序区元素不满足条件
            while (sortIndex >= 0 && arr[sortIndex]>noSortNum)
            {
                //只要进了循环,证明满足条件
                //排序区元素需要往后退一格
                arr[sortIndex + 1] = arr[sortIndex]; 
                //移动到排序区前一个位置继续比较
                --sortIndex;
            }
            //最终插入数字
            //循环只是确认位置,循环结束后最终插入对应位置
            arr[sortIndex + 1] = noSortNum;
        }
总结:

为什么有两层循环

第一层循环:一次取出未排序区的元素进行排序

第二层循环:找到想要插入的位置

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

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

已排序区和未排序区

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

为什么使用while循环

满足条件才比较

否则证明插入位置已确定

不需要继续循环

为什么可以直接往后移位置

每轮未排序数已记录

最后一个位置不怕丢

为什么确定位置后,是放在sort Index+1的位置

当循环停止时,插入位置应该是停止循环的索引1处

基本原理

两个区域

用索引值来区分

未排序区与排序区

元素不停比较

找到合适位置

插入当前元素

套路写法

两层循环

一层获取未排序区元素

一层找到合适插入位置

注意事项

默认开头已排序

第二层循环外插入

相关推荐
ellis19701 小时前
Unity插件SafeArea Helper适配异形屏详解
unity
nnsix2 小时前
Unity Physics.Raycast的 QueryTriggerInteraction枚举作用
unity·游戏引擎
地狱为王2 小时前
Cesium for Unity叠加行政区划线
unity·gis·cesium
一刻钟.4 小时前
C#高级语法之线程与任务
开发语言·c#
weixin_307779135 小时前
C#实现两个DocumentDB实例之间同步数据
开发语言·数据库·c#·云计算
foundbug9995 小时前
基于C#的OPC DA客户端实现源码解析
开发语言·c#
Crazy Struggle7 小时前
.NET 中如何快速实现 List 集合去重?
c#·.net
xb11328 小时前
C#生产者-消费者模式
开发语言·c#
今晚打老虎z8 小时前
解决SQL Server 安装运行时针对宿主机内存不足2GB的场景
sqlserver·c#
Traced back9 小时前
# C# WinForms 数据库清理系统基础知识与避坑指南
开发语言·数据库·c#