一、算法思路
1、外层循环:i 0 —> N
保证从0至i-1位置上的元素已经是排好序的
2、内层循环: j i —> 1
负责找到位置i的元素应该处于0—i-1的哪个位置
二、代码实现
void InsertSort(int A[], size_t N)
{
int tmp;
for (int i=0; i<N; i++)
{
tmp = A[i];
for (j=i; j>0 && A[j-1]>tmp; j--)
{
A[j] = A[j-1];
}
A[j] = tmp;
}
}
三、性能分析
1、如果输入的序列是反序的,则插入排序的运行时间为O(N²)
2、如果输入的序列是已经排好序的,则运行时间为O(N)
3、通常情况,输入 的序列比较随机,插入排序的运行时间更接近于O(N²)