C#学习笔记本--第一篇(排序算法之插入排序)

一、插入排序的原理

        将需要排序的数组划分为未排序部分和排序部分,在两个部分中间增加一个索引值用来作为分隔。未排序部分不断地与已排序好的部分的元素进行比较,插入到合适的位置,直到未排序的元素为空,停止排序。注意:这两部分处于同一个数组中。

插入排序图像展示

二、代码实现部分

 //实现升序 大的放在后面 降序就把>改为<
 int[] arr = { 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 unSortValue = arr[i];
     //第三步
     //在未排序区进行比较
     //移动位置
     //确定插入索引
     //循环停止条件
     //1.发现前面排序区的元素已经比较完毕
     //2.发现前面排序区的元素已经不满足比较条件了
     while (sortIndex>=0 && arr[sortIndex] > unSortValue)
     { 
         //只要进了这个while循环 证明满足条件
         //排序区中的元素 就应该往后退一个位置
         arr[sortIndex + 1] = arr[sortIndex];
         //移动到排序区的前一个位置 准备继续比较
         --sortIndex;
     }
     //最终插入数字
     //循环中只是在确定位置
     //最终插入对应位置 应该在循环结束后
     arr[sortIndex + 1] = unSortValue;
 }
 for (int i = 0; i < arr.Length; i++)
 {
     Console.WriteLine(arr[i]);
 }

三、总结

//为什么有两层循环
//第一层循环:一次取出未排序区的元素进行排序
//第二层循环:在排序区中找到合适的位置

//为什么第一层循环从1开始遍历
//插入排序的关键是分两个区域
//已排序区 和 未排序区
//默认第一个元素在已排序区

//为什么使用while循环
//满足条件才比较
//否则证明插入位置已确定
//不需要继续循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值