插入排序
两个区域 未排序区 用一个索引值做分水岭
未排序区元素与排序区元素比较插入到合适位置
直到未排序区清空
前提规则
排序开始 时,首先认为第一个元素在排序区中
其他所有元素在未排序区
排序开始后
每次将未排序区第一个元素取出用于和 排序区中的元素比较
满足条件则 排序区中元素往后移一个位置
所有的数字都在一个数组中,两个区域是一个分水岭索引
第一步
取出未排序区的所有元素进行比较,i=1的原因 默认第一个元素就在排序区
cs
for(int i = 1; i < array.Length; i++)
第二步
每一轮
取出排序区的最后一个元素索引
cs
int sortIndex = i - 1;
cs
int noSortNum = array[i];
第三步 在未排序区进行比较
移动位置
确定插入索引
循环停止的条件
1发现排序区中所有元素都已经比较完
2发现排序区中的元素不满足比较条件了
cs
while (sortIndex >= 0 && array[sortIndex] > noSortNum)
{
//只要进了这个while循环 证明满足条件
//排序区中的元素 就应该往后退一格
array[sortIndex + 1] = array[sortIndex];
//移动到排序区的前一个位置 准备继续比较
--sortIndex;
}
array[sortIndex + 1] = noSortNum;
全程
cs
for(int i = 1; i < array.Length; i++)
{
int sortIndex = i - 1;
int noSortNum = array[i];
while (sortIndex >= 0 && array[sortIndex] > noSortNum)
{
array[sortIndex + 1] = array[sortIndex];
--sortIndex;
}
array[sortIndex + 1] = noSortNum;
for(int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}