一、定义
就是将一个数据插入到一个有序的数据序列,从而得到一个新的、个数加一的有序数据序列。
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
二、分类
插入排序一般分为简单直接插入排序,折半插入排序,希尔排序。
1、直接插入:将未排序的数据,直接按照键值的大小,插入到已经排好序的数据序列中。
2、希尔排序:
把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
3、
折半插入排序:是插入排序算法的一种改进,由于排序算法过程中就是不断的依次将元素插入前面已排好序的序列中。减少了关键字之间比较的次数。
三、基本操作
实例:对a{7,6,3,2,4}分别用直接插入,希尔排序,折半插入排序进行排序。
1、直接插入算法
关键代码:
static void InsertSort(int[] a)
{
for (int i = 1; i < a.Length; i++)
{
if (a[i - 1] > a[i])
{
int temp = a[i]; // 定义临时变量,用来储存a[i]
int j = i;
while (j>0 && a[j - 1] > temp)
{
a[j] = a[j - 1]; //互换位置
a[j-1] = temp;
j--;
}
}
}
}
代码解释:
未完待续~下篇博客将讲述折半插入排序算法