序言
插入排序是一种逻辑简单、基础的排序,从插入排序又延展出了一些排序,如:希尔排序(Shell Sort)。
思路讲解
- 插入排序顾名思义,通过插入数字的方式来排序。
- 怎么个插入法?
-
单次循环遍历
- 从第一个数开始,默认第一个数已经排好序,因为单个数字不需要排序。
- 遍历到第二个数,让其与前面已经排好序的元素依次做对比。例如:第二个数是
1
,而第一个数是4
,那么1
需要排在4
的前面,所以需要把4
往后挪一个位置(填补了刚刚1
的位置),把1
插入到4
的前面。以此往复。
-
多次向后循环遍历
-
代码示例
void InsertSort(int* a, int n)
{
int i = 1;
while (i < n)
{
int tmp = a[i];
int j = 1;
while (i - j > -1 && tmp < a[i - j])
{
a[i - j + 1] = a[i - j];
// 最后的++j:即使下一次不进入循环,j也+1了,意味着循环内外j的值不一样
++j;
}
a[i - j + 1] = tmp;
++i;
}
}