(入门)C#中的常用排序算法——插入排序(其二)

        从上一则博客讲起,目前我们已经知晓了冒泡排序这种算法,接下来就来看看第二种排序算法——插入排序

(感谢读者朋友些,这是传送门:冒泡排序

正式开始

        同样的,这还是从小到大排序。我懒惰,不想写从大到小的,聪明的读者朋友应该会写。

         顾名思义,插入排序,就是把每一个需要排序的元素,按照它自己的大小插入到前面的已经排序完成的区间里面,有方向性的扫描。

         有两种插入排序,一种是直插(扑克直接插入排序),另一种是希尔插入排序。介于希尔插入的排序方式具有针对性,且新手难以直接理解(再加上作者懒惰),所以本文只介绍直插

        (希尔插入也提一下,就是分段排序最后逼近有序)。

        是不是超级简单……

代码思路

        假设存在一个无序数组M[1,2,3,......,n-1,n-2]

        初始状态

                M[1]肯定是有序的嘛(只有一个元素,你自己细品)。

                M[2,......,n]肯定是无序区间。

        插入第一次

                将M[i]插入M[1,......,i-1]中。

        继续插

                从i=2 到 i=n,一个一个依次试着去插,插进去了为止

        插完了

                存在有序区间M[1,2,......n].

说简单点,就像斗地主清牌的时候。

        你现在手上有的牌是:

                 7 , 4 , 10 , Q , J 

        首先你会以  7  为基础,因为  4  比  7  小,所以你会把它放在  7  左边;接着  10  比  7  与  4  都要大,所以你会把  10  放在最右边......以及类推。

最后整理为:

                 4 , 7 , 10 , J , Q

代码实例

        (Ctrl+c&Ctrl+v)

这里是方法代码

public static void Insertion_Sort(int[] List)
        {
            for(int i = 1; i < List.Length; i++)
            {
                int Save = List[i];//储存有序区间内的元素
                int Index = i;//获得目前的下标
                while ((Index > 0) && (List[Index - 1] > Save))
                {
                    List[Index] = List[Index-1];//交换数据
                    --Index;//注意,一定是"--Index"而不是"Index--",因为下面还有个Index需被原使用
                }
                List[Index] = Save;
            }
        }

我也啊把那个项目代码发一下

using System;

namespace straight_insertion_sort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] Example = new int[] {34,115415,32,42,42,32,44 };
            Insertion_Sort(Example);
            foreach(var item in Example)
            {
                Console.Write(item + ",");

            }
            Console.Read();
        }
        public static void Insertion_Sort(int[] List)
        {
            for(int i = 1; i < List.Length; i++)
            {
                int Save = List[i];//储存有序区间内的元素
                int Index = i;//获得目前的下标
                while ((Index > 0) && (List[Index - 1] > Save))
                {
                    List[Index] = List[Index-1];//交换数据
                    --Index;//注意,一定是"--Index"而不是"Index--",因为下面还有个Index需被原使用
                }
                List[Index] = Save;
            }
        }
    }
}

最后收工了哈

        感谢诸位读者

        希望各位新手能手打代码,一两遍过后就会写了。

        大家有什么不懂的可以问我,尽管我也才学殊浅,但也会尽力的。

        (不要随便转载哦,记得给我说声)

猜你喜欢

转载自blog.csdn.net/LBCLBC666/article/details/126147134