目录
一.插入排序
1.1简介
插入排序(Insertion Sort)是一种简单直观的排序算法,其基本思想是将未排序的元素逐个插入到已排序序列中的合适位置,从而得到一个有序序列。
1.2图解
1.3过程
- 从第一个元素开始,我们认为该元素已经是一个有序序列;
- 取出下一个元素,在已排序序列中从后向前扫描;
- 如果已排序的元素大于取出的元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或等于取出的元素的位置;
- 将取出的元素插入到该位置后;
- 重复步骤2~5,直到所有元素都被插入到正确的位置。
1.4特点
插入排序的特点是每次将一个待排序的元素插入到已排序序列的合适位置,通过不断地插入操作,逐渐构建起完整的有序序列。在实现过程中,可以使用循环和递归两种方式来实现。
相比于其他高级排序算法,插入排序的优势在于代码实现简单,适用于小规模数据和部分有序的数据。同时,插入排序是稳定的排序算法,即相等元素的相对顺序不会改变。然而,插入排序的时间复杂度为O(n^2),在处理大规模乱序数据时效率较低。因此,对于大规模数据的排序任务,通常会选择更高效的排序算法。
1.5总结
总结起来,插入排序是一种简单但性能稍逊的排序算法,适用于小规模数据或部分有序的数据。它的核心思想是通过不断地将待排序元素插入到已排序序列中,逐渐构建出完整的有序序列。
1.6代码解释
void SortInsert(int* a,int n)
{
for (int i = 0; i < n-1; i++)
{
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
a[end+1] = tmp;
}
}
- 初始化一个循环,从第一个元素开始,直到倒数第二个元素(
n-1
)。- 在每次循环中,将当前元素的索引赋值给
end
变量,并将下一个元素保存在tmp
变量中。- 使用一个内部循环,从
end
开始向前遍历已排序序列。- 在内部循环中,如果当前已排序的元素大于
tmp
,就将该元素后移一位(a[end+1] = a[end]
),并将end
减一。- 如果找到一个已排序的元素小于或等于
tmp
,则退出内部循环。- 在外部循环中,将
tmp
插入到内部循环结束时的位置(a[end+1] = tmp
)。- 重复执行步骤2~6,直到循环结束。