C#实现插入排序

作者:Darren 时间:2023-07-02 13:16:58 

在选择排序中,从第一个元素开始,依次遍历数组中的元素,找出当前遍历元素之后的最小元素,与当前遍历元素交换位置,依此类推,是一种由前往后的排序。而在插入排序中,从第二个元素开始,依次遍历数组中的元素,把当前遍历元素与之前的元素进行比较,并插入到之前的某个位置,是一种由后往前的排序。

自定义一个类,里面维护着一个int[]类型数组,通过构造函数定义数组长度并初始化,并提供了打印和插入排序的相关方法。

public class MyArray
   {
       private static int[] arr;
       private static Random r = new Random();
       public MyArray(int size)
       {
           arr = new int[size];
           for (int i = 0; i < arr.Length; i++)
           {
               arr[i] = r.Next(10, 100);
           }
       }
       //插入排序
       public void Sort()
       {
           int insert;
           for (int i = 1; i < arr.Length; i++) //从第二个元素开始遍历
           {
               insert = arr[i];//把当前遍历元素视为插入元素,放到临时变量insert中
               int moveItem = i;//movieItem可以理解为一个动态索引,初始位置在当前遍历元素的索引
               while (moveItem > 0 && arr[moveItem -1] > insert) //如果前面一个元素比插入元素大
               {
                   arr[moveItem] = arr[moveItem - 1];//那就把前面这个元素赋值给后面位置,相当于往后移一位
                   moveItem--;//再把动态索引位置向前移动一位
               }
               arr[moveItem] = insert;
               Print();
           }
       }
       //打印数组元素
       public void Print()
       {
           foreach (var item in arr)
           {
               Console.Write(item + " ");
           }
           Console.WriteLine();
       }
   }

以上,大致过程是:从数组中第二个元素开始,先把当前遍历元素赋值给一个临时变量,比如说是insert,insert这个变量肯定要插入到当前遍历元素之前的某个位置,如何确定插入位置呢?假设用moveItem变量表示最终要插入的索引位置,先把当前遍历元素的索引赋值给moveItem,如果moveItem-1位置上的元素大于insert,那就把moveItem-1位置上的元素向后移动一位,并把moveItem-1位置的索引赋值给moveItem,insert是要插入到当前的这个moveItem位置吗?不一定。再继续拿当前moveItem位置的前面一个位置上的元素与insert比较,只要是比insert大,就把该位置上的元素向后移动一位,并重新设置moveItem的值,直到停止循环。此时moveItem的值就是insert需要插入的位置。

客户端调用。

class Program
   {
       static void Main(string[] args)
       {
           MyArray myArray = new MyArray(8);
           Console.WriteLine("排序前:");
           myArray.Print();
           Console.WriteLine("排序后:");
           myArray.Sort();
           Console.ReadKey();
       }
   }

C#实现插入排序

对于插入排序,当依次遍历数组元素时,进行了n-1次迭代,当把第二个元素插入到之前某个位置时进行了1次迭代,当把第三个元素插入到之前某个位置时进行了2次迭代......第n个元素进行了n-1次迭代,以时间复杂度来说,忽略小项和常数项,插入排序基本上是一个平方阶,写成O(n&sup2;)。 

来源:https://www.cnblogs.com/darrenji/p/3875070.html

标签:C#,插入,排序
0
投稿

猜你喜欢

  • c#创建windows服务(Windows Services)详细步骤

    2023-06-11 19:05:22
  • Android中Splash应用启动白屏问题的解决方法

    2022-08-25 14:24:33
  • SpringBoot整合Shiro两种方式(总结)

    2021-09-08 21:28:24
  • Android 通知的基本用法示例代码

    2022-09-28 03:54:50
  • SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    2023-06-21 19:16:23
  • 23种设计模式(12)java模版方法模式

    2021-10-24 11:00:31
  • java 中同步、异步、阻塞和非阻塞区别详解

    2023-06-21 19:26:07
  • 常见Android编译优化问题梳理总结

    2021-08-17 11:21:48
  • 使用@RequestBody配合@Valid校验入参参数

    2023-05-04 22:36:09
  • C++语言实现线性表之链表实例

    2023-06-20 22:21:20
  • nacos使用占位符${}进行参数配置的方法

    2022-07-15 08:59:07
  • 基于JWT.NET的使用(详解)

    2021-07-09 22:15:25
  • C# List引用类型克隆的3种方法

    2023-04-19 14:20:44
  • Java 中Comparable和Comparator区别比较

    2023-10-28 23:16:34
  • SpringBoot 将配置文件挂到 jar 包外面的操作方法

    2023-11-17 11:09:32
  • 解决mybatis #{}无法自动添加引号的错误

    2023-09-21 11:45:02
  • Android 开发之Dialog,Toast,Snackbar提醒

    2021-05-31 14:27:20
  • Java 逻辑控制全面详解

    2022-10-29 09:01:48
  • c#学习之30分钟学会XAML

    2022-02-08 03:09:52
  • Idea配置超详细图文教程(2020.2版本)

    2023-03-13 21:41:04
  • asp之家 软件编程 m.aspxhome.com