首页 > 编程语言 >C#插入排序算法

C#插入排序算法

时间:2023-08-23 20:34:28浏览次数:42  
标签:temp C# 插入排序 元素 int 算法 array 排序

插入排序实现原理

插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。

具体实现步骤如下

  1. 首先咱们假设数组长度为n,从第二个元素开始,将当前元素存储在临时变量temp中。
  2. 从当前元素的前一个位置开始向前遍历,比较temp与每个已排序元素的值大小。
  3. 如果已排序元素大于临时变量temp中的元素,则将该元素后移一位,继续向前比较。
  4. 直到找到小于或等于temp的元素位置,将temp插入到该位置后面。
  5. 这样重复步骤2至4,直到所有元素都被插入到适当的位置则排序结束。

插入排序图解

插入排序完整代码示例

        public static void InsertionSort(int[] array)
        {
            int arrayLength = array.Length;//数组长度(时间复杂度为O(n^2))
            for (int i = 1; i < arrayLength; ++i)
            {
                //定义临时变量
                int temp = array[i];
                int j = i - 1;

                while (j >= 0 && array[j] > temp)
                {
                    array[j + 1] = array[j];
                    j--;
                }

                array[j + 1] = temp;
            }
        }

        public static void InsertionSortRun()
        {
            int[] array = { 26, 15, 5, 3, 38, 36, 44, 27, 47, 2, 46, 4, 50, 19, 48 };

            Console.WriteLine("排序前:" + string.Join(", ", array));

            InsertionSort(array);

            Console.WriteLine("排序后:" + string.Join(", ", array));
        }

输出结果

总结

插入排序算法是一种简单且直观的排序算法。它的时间复杂度为O(n^2),其中n是待排序数组的长度。插入排序在处理小型数据集时具有一定优势,但是对于大型数据集,插入排序的性能会较差。

参考文章

https://blog.csdn.net/weixin_44231544/article/details/126278933

标签:temp,C#,插入排序,元素,int,算法,array,排序
From: https://www.cnblogs.com/Can-daydayup/p/17652713.html

相关文章

  • TCP --- 为什么是可靠的通信方式
    TCP包有CRC校验字段 序列号和应答 超时重传 拥塞控制根据网络情况和接收端接收数据能力调整发送量。滑动窗口控制解决了两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的......
  • 【Oracle RAC Database】Oracle Grid Infrastructure 启动流程与日志
    OS启动OHASD(OracleHighAvailabilityServices)init.ohasd.run被启动,该进程负责启动ohasd.bin守护进程[root@node01~]#ps-ef|grepohasd|grep-vgreproot5151018:59?00:00:00/bin/sh/etc/init.d/init.ohasdrun>/dev/null2>&1</dev/......
  • javaScript之内置对象1
    一:概述JavaScript内置对象表示Web浏览器内部支持的对象,它们提供了很多有用的功能,让使用者可以快速实现许多功能。二:说明及其举例说明数据类型:包括Number、String、Boolean、Object、Array等,这些对象提供了用于操作基本数据类型的方法。例如,使用String对象的substring()方法可以截取......
  • Sigma-Delta ADC 简介
    本文转自:什么是Sigma-DeltaADC(linkchip.cn) Sigma-DeltaADC是一种目前使用最为普遍的高精度ADC结构,在精度达到20位以上的场合,Sigma-Delta是必选的结构。通过采用过采样、噪声整形以及数字滤波技术,降低对模拟电路的设计要求,实现了其他类型的ADC无法达到的高精度和低功耗。通......
  • 【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战
    前言Ehcache是一个流行的Java缓存框架,它提供了一种快速、可扩展和高效的方式来缓存数据。它可以帮助企业应用程序提高性能并减少数据库负载,因为它可以缓存经常访问的数据。Ehcache的主要特点快速:Ehcache使用内存缓存数据,因此它可以快速地访问缓存数据,而不需要从磁盘或数据库中读取......
  • docker 安装【菜鸟级教程】
    前言1.安装及环境1.1.Linux安装1.2.Windows安装2.初识Docker2.1.进入dockerhttps://www.cnblogs.com/xhyan/p/6593075.2.2.命令行基本操作安装依赖yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2Docker实例Docker安装CentosCentOS镜像库地址:https:/......
  • 「题解」Codeforces 825G Tree Queries
    点权转边权,把边权设为两个端点的\(\min\),然后发现询问\(x\)的答案,就是询问\(x\)与所有黑点的虚树,边权的\(\min\)是多少。假设要判定答案是否\(\geqk\),那么就是询问\(x\)只经过\(\geqk\)是否能到达所有黑点,于是想到建立Kruskal重构树,那么\(x\)与所有黑点的LCA......
  • 扩展功能_MP框架对于Service层的支持
            ......
  • A VNC server is already running as :1
    看到这一行字是不是很崩溃。当输入vncserver-kill:1,输出结果是:Can'tfindfile/home/ubuntu/.vnc/VM-0-11-ubuntu:1.pidYou'llhavetokilltheXtightvncprocessmanually是不是更崩溃。 不过,经过热心网友的分享,且最终亲测有效的解决方法就是:删除这两个文件。rm/......
  • C++面向对象笔记(转载自黑马程序员)
    C++核心编程本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。1内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的......