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

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

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处

基本原理
        两个区域
        用索引值来区分
        未排序区与排序区
        元素不停比较
        找到合适位置
        插入当前元素

套路写法
        两层循环
        一层获取未排序区元素
        一层找到合适插入位置

注意事项
        默认开头已排序
        第二层循环外插入

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

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

相关文章

Unity面试题:热更新篇

请简要介绍Unity热更新的原理和实现方式。 答&#xff1a;Unity热更新的原理是通过将游戏的资源和代码分离&#xff0c;将代码部分放置在服务器端&#xff0c;游戏启动时通过网络下载更新的代码并动态加载&#xff0c;以达到实现热更新的目的。实现方式包括AssetBundle、ILRunt…

CVE漏洞复现-CVE-2019-5021 镜像漏洞利用

CVE-2019-5021 镜像漏洞利用 随着容器技术的普及&#xff0c;容器镜像也成为软件供应链中非常重要的一个组成的部分。人们像使用 pip 等工具从仓库获取各种编程软件库一样&#xff0c;可以从 Docker Hub 或 第三方仓库拉取镜像&#xff0c;在其基础上进行开发&#xff0c;从而…

网络基础1

文章目录 网络基础11. 计算机网络背景1.1 网路发展1.2 认识 "协议" 2. 网络协议初识2.1 协议分层2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型协议栈与OS的关系 3. 网络传输基本流程3.1 同一个局域网两台主机通信3.2 同一个路由器的两个子网通信 4. 网络中的地址管理4…

WebGL: 几个入门小例子

本文罗列几个WebGL入门例子&#xff0c;用于帮助WebGL学习。 一、概述 WebGL (Web Graphics Library)是一组基于Open ES、在Web内渲染3D图形的Javascript APIs。 Ref. from Khronos Group: WebGL WebGL™ is a cross-platform, royalty-free open web standard for a low-lev…

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…

python的下载和安装步骤,python下载安装教程3.10.0

大家好&#xff0c;给大家分享一下python下载安装教程3.10.0&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 第一步&#xff1a;下载Python安装包 在Python的官网 www.python.org 中找到最新版本的Python安装包&#xff0c;点击进行下载&a…

探究Spring事务:了解失效场景及应对策略

在现代软件开发中&#xff0c;数据的一致性和完整性是至关重要的。为了保证这些特性&#xff0c;Spring框架提供了强大的事务管理机制&#xff0c;让开发者能够更加自信地处理数据库操作。然而&#xff0c;事务并非银弹&#xff0c;存在一些失效的情景&#xff0c;本文将带您深…

AtcoderABC227场

A - Last CardA - Last Card 题目大意 一共 K 张卡片分发给 N 个人&#xff0c;这些人的编号为 1, 2, …, N 从第 A 个人开始&#xff0c;按照顺序依次将卡片发给以下人员&#xff1a;A, A1, A2, …, N, 1, 2, …问最后一个卡片将发给哪个人&#xff1f; 具体来说&#xff0c;…

2023年C++面试宝典

目录 第一章&#xff1a;C基础知识1.1 C语言起源与发展1.2 C的重要特点和优点1.3 C的数据类型和变量1.4 函数和命名空间1.5 运算符和表达式 第二章&#xff1a;面向对象编程2.1 类与对象的概念2.2 封装、继承和多态2.3 构造函数和析构函数2.4 静态成员和常量成员2.5 虚函数和纯…

34 从磁盘读取数据到内存的调试

前言 我们大多数的文件是存储在磁盘上面的 然后 我们通过 open read/write 相关 api 是控制的是 磁盘 和 内存 之间的数据交互 磁盘 到 内存, 或者 内存 到 磁盘 我们这里 来大致看一下 磁盘到 内存的这一个过程 调试读取磁盘数据到 page 的流程 这里的流程主要是包含…

【FAQ】EasyGBS平台通道显示在线,视频无法播放并报错400的排查

EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;它可以支持国标协议的设备接入&#xff0c;在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能&#xff0c;既能作为业务平台使用&#xff0c;也能作为能力层平台调用。 我…

装饰器模式(Decorator)

装饰器模式是一种结构型设计模式&#xff0c;用来动态地给一个对象增加一些额外的职责。就增加对象功能来说&#xff0c;装饰器模式比生成子类实现更为灵活。装饰器模式的别名为包装器(Wrapper)&#xff0c;与适配器模式的别名相同&#xff0c;但它们适用于不同的场合。 Decor…