十大常用的排序算法之插入排序 C#实现

十大常用的排序算法之插入排序 C#实现

算法描述

  什么是插入排序呢?插入排序,一般也被称为直接插入排序,英文名Insertion Sort。它的主要思想为:将数组分为有序数组和无序数组,在无序数组中抽出一个元素,插入到有序数组。当然不可能随随便便就放进有序数组了,在插入有序数组时需要找到一个合适的位置。那么怎么来找到这个合适的位置呢,我举一个简单的例子。

  大家都打过扑克牌吧!假设你摸起的第一张牌是“9”,这个时候将你手上的牌看做一个有序数组,牌堆的牌是无序数组。
在这里插入图片描述
摸起的第二张牌是“5”,那么这第二张牌就是一个待插入的元素。
在这里插入图片描述
这时你会把“5”和“9”做一个大小的比较,很明显“5”是更小的一个,合适的位置“9”的左边。
在这里插入图片描述
再摸起来一张“10”。
在这里插入图片描述
将“10”与“9”做比较,“10”更大一些,合适的位置是“9”的右边。
在这里插入图片描述
这时,又摸起来一张“5”。
在这里插入图片描述
优先与“10”比较,小于“10”。再与“9”比较,小于“9”。再与(方片)“5”比较,(梅花)“5”并不会小于(方片)“5”,那么手上(图中方片)“5”和“9”之间就是我们要找的合适的位置!把(梅花)“5”插入进去。(注:比大小只比数字,与花色无关。如果待插入元素小于比较元素才会继续向左遍历,提到花色只是为了区分我说的是哪个“5”
在这里插入图片描述
依次类推…摸到“7”…比较…插入。
在这里插入图片描述
摸到“Q(12)”…比较…插入。

在这里插入图片描述
当所有元素都在有序数组时,排序结束。


算法实现 C#

        //插入排序
        public static int[] InsertSort(int[] arr)
        {
            //数组下标0的元素视为有序,从1开始遍历
            for(int i = 1; i < arr.Length; i++)
            {
                //将待插入的元素取出
                int inserted = arr[i];

                //j所指向的是待比较的元素
                int j = i-1;

                //如果j所指向的待比较元素下标大于或等于0时,并且待插入的元素小于待比较的元素时,待比较元素向后移动
                //然后继续向左遍历(j--),那么空出来的位置就是(j+1)
                for (; j >= 0 && inserted < arr[j]; j--)
                {
                    arr[j+1] = arr[j];
                }
                //直到不满足条件时结束循环,空出来就是"合适的位置",将元素插入
                arr[j + 1] = inserted;
            }
            return arr;
        }

算法分析
  插入排序是稳定排序(稳定排序和不稳定排序),时间复杂度为O(n2)(最好的情况下O(n)),空间复杂度为O(1)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值