C# 常用排序算法 —— 插入排序:直接插入排序

思想:复制插入元素为哨兵,记录后移,查找插入位置

         #region 知识点二 代码实现
            //实现升序 把 大的 放在最后面
            int[] arr = new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 };

            //前提规则
            //排序开始前
            //首先认为第一个元素在排序区中
            //其它所有元素在未排序区中

            //排序开始后
            //每次将未排序区第一个元素取出用于和
            //排序区中元素比较(从后往前)
            //满足条件(较大或者较小)
            //则排序区中元素往后移动一个位置。

            //注意
            //所有数字都在一个数组中
            //所谓的两个区域是一个分水岭索引

            //第一步
            //能取出未排序区的所有元素进行比较
            //i=1的原因:默认第一个元素就在排序区
            for (int i = 1; i < arr.Length; i++)
            {
                //第二步
                //每一轮
                //1.取出排序区的最后一个元素索引
                int sortIndex = i - 1;
                //2.取出未排序区的第一个元素
                int noSortNum = arr[i];
                //第三步
                //在未排序区进行比较
                //移动位置
                //确定插入索引
                //循环停止的条件
                //1.发现排序区中所有元素都已经比较完
                //2.发现排序区中的元素不满足比较条件了
                while (sortIndex >= 0 &&
                    arr[sortIndex] > noSortNum)
                {
                    //只要进了这个while循环 证明满足条件
                    //排序区中的元素 就应该往后退一格
                    arr[sortIndex + 1] = arr[sortIndex];
                    //移动到排序区的前一个位置 准备继续比较
                    --sortIndex;
                }
                //最终插入数字
                //循环中知识在确定位置 和找最终的插入位置
                //最终插入对应位置 应该循环结束后
                arr[sortIndex + 1] = noSortNum;
            }

            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }
            #endregion

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值