C#排序算法3:插入排序
插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。

原理:
static int[] InsertSort(int[] arr)
{
//插入排序是把无序列的数一个一个插入到有序的数
//1.先默认下标为0这个数已经是有序
for (int i = 1; i < arr.Length; i++)
{
int insertVal = arr[i]; //2.首先记住这个预备要插入的数
int insertIndex = i - 1; //找出它前一个数的下标(等下 准备插入的数 要跟这个数做比较) //4.如果这个条件满足,说明,我们还没有找到适当的位置
while (insertIndex >= 0 && insertVal < arr[insertIndex]) //这里小于是升序,大于是降序
{
arr[insertIndex + 1] = arr[insertIndex]; //3.同时把比插入数要大的数往后移
insertIndex--; //3.指针继续往后移,等下插入的数也要跟这个指针指向的数做比较
}
//5.插入(这时候给insertVal找到适当位置)
arr[insertIndex + 1] = insertVal;
}
return arr;
}
排序结果
static void Main(string[] args)
{
Console.WriteLine($"数据算法");
var arr1 = GetArrayData(8, 1, 22);
Console.WriteLine($"生成未排序数据arr1:{ShowArray(arr1)}");
//var arr2 = BubbleSort(arr1);
//Console.WriteLine($"冒泡排序:{ShowArray(arr2)}");
//var arr3 = SelectSort(arr1);
//Console.WriteLine($"选择排序arr3:{ShowArray(arr3)}");
//var val = arr3[3];
var arr4= InsertSort(arr1);
Console.WriteLine($"插入排序arr4:{ShowArray(arr4)}"); //var index= BinarySearch(arr3, 0, arr1.Length - 1,val);
//Console.WriteLine($"{val}在 arr3中出现的索引位置是{index}");
//var val2 = arr3[4];
//var index2 = BinarySearch2(arr3, val2);
//Console.WriteLine($"{val2}在 arr3中出现的索引位置是{index2}");
Console.ReadLine();
}

C#排序算法3:插入排序的更多相关文章
- 常见排序算法总结:插入排序,希尔排序,冒泡排序,快速排序,简单选择排序以及java实现
今天来总结一下常用的内部排序算法.内部排序算法们需要掌握的知识点大概有:算法的原理,算法的编码实现,算法的时空复杂度的计算和记忆,何时出现最差时间复杂度,以及是否稳定,何时不稳定. 首先来总结下常用内 ...
- 算法相关——Java排序算法之插入排序(四)
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- 我的Java开发学习之旅------>Java经典排序算法之插入排序
一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69, 42" 我们从第二个数字开始,这个数字是27,我们的 ...
- C数据结构排序算法——直接插入排序法用法总结(转http://blog.csdn.net/lg1259156776/)
声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 排序相关的的基本概念 排序:将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): ...
- Java排序算法之插入排序
基本过程: 每次将待排元素和已经排序好的序列进行比较,按照大小顺序插入进去,重新构造一个新的有序序列. 插入排序算法有种递归的思想在里面,它由N-1趟排序组成.初始时,只考虑数组下标0处的元素,只有一 ...
- 数据结构与算法之PHP排序算法(插入排序)
一.基本思想 插入排序算法是每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到所有元素插入完毕为止. 二.算法过程 1)将第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未 ...
- 【DS】排序算法之插入排序(Insertion Sort)
一.算法思想 一般来说,插入排序都采用in-place在数组上实现.具体算法描述如下:1)从第一个元素开始,该元素可以认为已经被排序2)取出下一个元素,在已经排序的元素序列中从后向前扫描3)如果该元素 ...
- 排序算法之插入排序的python实现
插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待 ...
随机推荐
- CICD实践1:环境安装篇
一.CICD技术选型 配置管理工具 工具 需求管理工具 使用禅道 代码管理工具 使用Gitlab 编译构建工具 搭建Jenkins,使用Jenkinsfile 制品库工具 nexus 文档管理工具 C ...
- linux环境下脚本部署项目出现nohup: redirecting stderr to stdout问题
解决办法: 把后面的 "&" 改成 "2>&1 &" 最终改为: nohup java -jar ${JAR_NAME} --lo ...
- LIS和LCS算法分析
LIS(最长上升子序列) 常规的解法就是动态规划. mx[ j ]表示长度为j的上升子序列最小的值a[i]; dp[ i ]表示前i个数的最长上升子序列长度多少. 1 for(int i=1;i< ...
- 使用.NET Core接入飞书AI
飞书AI接入教程 首先,准备俩个账号:ChatGPT账号.飞书账号. 飞书账号请自行注册,访问链接 www.feishu.cn/ 即可登录. 第一步,飞书进入开发者平台.点击创建应用. 填写应用名称和 ...
- Vue3节流指令封装
节流指令 import { ObjectDirective } from 'vue' interface ThrottleEl extends HTMLElement { throttleEvent: ...
- 11 个步骤完美排查Linux服务器是否被入侵
文章来源公众号:LemonSec 随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至关重要,个人结合自己的工作经历,整理了几种常见的机器被黑情况供参考 ...
- Python汉诺塔递归算法实现
关于用递归实现的原理,请查看我之前的文章: C语言与汉诺塔 C#与汉诺塔 以下为代码: count = 0 def move(pile, src, tmp, dst): global count if ...
- Centos7 Zabbix3.2安装(yum)
http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/ #官网下载地址(只包含zabbix的应用包) ftp://47.104.78.123/zabbix/ ...
- libGDX游戏开发之NPC敌人事件(六)
libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式. ...
- Linux 逻辑卷管理
如果用标准分区在硬盘上创建了文件系统,为已有的文件系统添加额外的空间是一件十分痛苦的事情.只能在已有的硬盘上的可用空间范围内调整分区大小,如果硬盘空间不够的话,就只能换一个大容量的硬盘,然后手动将已有 ...